Burada 4 tamsayı ptrdizisine bir işaretçi var arr. ptrdizinin tamamını gösterir. ptr[0]veya *ptrdizinin ilk öğesini işaret eder, böylece dizinin ptr[0]ikinci öğesinin adresini vermek için 1 eklenir .
Neden kullanarak sizeof(ptr[0])tüm dizinin boyutunu verir, 16 bayt, sadece ilk öğenin boyutunu değil, 4 bayt, ( ptr[0]dizideki ilk öğeye işaret eden gibi ).
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr;mı? Aslında hayır. dört değerden oluşan tam bir dizi için bir işaretçi olarak int (*ptr)[4]oluşturur . Gerçek çok boyutlu dizileri dinamik olarak ayırmak için bunun gibi işaretçi sözdizimi gereklidir. İç içe döngülerle oluşturulan ve yanlış olarak çok boyutlu diziler olarak tanımlanan "2 boyutlu diziler" , gerçekte 1-boyutlu dizilere birden çok 1-dizi dizilere işaret eden dizilerdir. Bkz. Stackoverflow.com/questions/42094465/…ptrintmalloc()
int *ptr = arr;mı? Bu, dizinin başlangıcına (ilk öğesi) eşdeğer olmasını sağlar&arr[0].