Witam,
Niedawno oglądałem film pana Zelenta odnośnie wskaźników (kurs c++) i spróbowałem napisać program ku utrwaleniu świeżo poznanej wiedzy. Niestety podczas próby zkompilowania programu wyskoczył błąd.
#include <iostream>
int main(){
int arr[]{99,24,501,456};
int *p=&arr;
std::cout<<*p;
}
Błąd znajduje się w 4. linii kodu. Zauważyłem także, że usuwając z niej znak ampersanda ('&')
int *p=arr;
program kompiluje się. Dzieje się tak także kiedy zamiast usuwać '&' dodam przed średnikiem '[0]'.
int *p=&arr[0];
I właśnie odnośnie tego mam pytanie: Dlaczego pisząc deklarację:
int *p=&arr;
program się nie kompiluje? Pan Zelent mówił przecież, że "nazwa tablicy jest adresem jej zerowego elementu".
Dam tutaj Państwu logi z błędu kompilacji:
In function 'int main()':
4:16: error: cannot convert 'int (*)[4]' to 'int*' in initialization
4 | int *p=&arr; //int *p=&arr[0];
| ^~~~
| |
| int (*)[4]