ที่นี่ฉันมีตัวชี้ptrไปยังอาร์เรย์arrของจำนวนเต็ม 4 ตัว ptrชี้ไปที่อาร์เรย์ทั้งหมด ptr[0]หรือ*ptrชี้ไปที่องค์ประกอบแรกของอาร์เรย์ดังนั้นการเพิ่ม 1 เพื่อptr[0]ให้ที่อยู่ขององค์ประกอบที่สองของอาร์เรย์
ฉันไม่เข้าใจว่าทำไมการใช้sizeof(ptr[0])ให้ขนาดของทั้งอาร์เรย์ 16 ไบต์ไม่ใช่ขนาดขององค์ประกอบแรกเท่านั้น 4 ไบต์ (ตามที่ptr[0]ชี้ไปที่องค์ประกอบแรกในอาร์เรย์)
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
          int *ptr = arr;?   จริงๆแล้วไม่มี  int (*ptr)[4]สร้างptrเป็นตัวชี้ไปยังอาร์เรย์ทั้งสี่intค่า ไวยากรณ์ของตัวชี้แบบนั้นมีความจำเป็นในการจัดสรรอาร์เรย์จริงหลายมิติ "อาร์เรย์ 2 มิติ" ที่สร้างขึ้นด้วยmalloc()ลูปซ้อนกันและอธิบายอย่างผิด ๆ ว่าอาร์เรย์หลายมิตินั้นเป็นอาร์เรย์พอยน์เตอร์ 1-d ไปจนถึงอาร์เรย์ 1-d หลายตัว ดูstackoverflow.com/questions/42094465/…
                
int *ptr = arr;หรือ ที่จะทำให้มันชี้ไปที่จุดเริ่มต้น (องค์ประกอบแรกของ)&arr[0]อาร์เรย์ซึ่งเทียบเท่ากับ