Tutaj mam wskaźnik ptr
do tablicy arr
4 liczb całkowitych. ptr
wskazuje na całą tablicę. ptr[0]
lub *ptr
wskazuje 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 ptr
jako wskaźnik do pełnej tablicy czterech int
wartoś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]
.