Tutaj mam wskaźnik ptrdo tablicy arr4 liczb całkowitych. ptrwskazuje na całą tablicę. ptr[0]lub *ptrwskazuje pierwszy element tablicy, więc dodanie 1 ptr[0]daje adres drugiego elementu tablicy.
Nie rozumiem, dlaczego użycie sizeof(ptr[0])daje rozmiar całej tablicy, 16 bajtów, a nie rozmiar tylko pierwszego elementu, 4 bajty (jak ptr[0]wskazuje na pierwszy element w tablicy).
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr;? Właściwie nie. int (*ptr)[4]tworzy ptrjako wskaźnik do pełnej tablicy czterech intwartości. Taka składnia wskaźnika jest niezbędna do dynamicznego przydzielania prawdziwych wielowymiarowych tablic. „Tablice 2-wymiarowe” utworzone za pomocą zagnieżdżonych malloc()pętli i błędnie opisane jako tablice wielowymiarowe są tak naprawdę tablicami jednowymiarowymi wskaźników do wielu tablic jednowymiarowych . Zobacz stackoverflow.com/questions/42094465/…
int *ptr = arr;? To wskazywałoby na początek (pierwszy element) tablicy, który jest równoważny&arr[0].