Di sini saya memiliki pointer ptr
ke array arr
4 bilangan bulat. ptr
menunjuk ke seluruh array. ptr[0]
atau *ptr
menunjuk ke elemen pertama array, jadi menambahkan 1 untuk ptr[0]
memberikan alamat elemen kedua array.
Saya tidak mengerti mengapa menggunakan sizeof(ptr[0])
memberikan ukuran seluruh array, 16 byte, bukan hanya ukuran elemen pertama, 4 byte, (sebagai ptr[0]
poin ke elemen pertama dalam array).
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr;
? Sebenarnya tidak. int (*ptr)[4]
menciptakan ptr
sebagai penunjuk ke array penuh dari empat int
nilai. Sintaksis pointer seperti itu diperlukan untuk mengalokasikan array true-multidimensional secara dinamis. "Array 2 dimensi" yang dibuat dengan malloc()
loop bersarang dan digambarkan secara keliru sebagai array multidimensi adalah benar-benar array pointer 1-ke beberapa array 1-d. Lihat stackoverflow.com/questions/42094465/…
int *ptr = arr;
? Itu akan membuatnya menunjuk ke awal (elemen pertama) array, yang setara dengan&arr[0]
.