ดูที่นี่:
struct mystruct{
int a;
int b;
};
int main(void){
struct mystruct* ptr;
ptr = malloc( 10*sizeof( struct mystruct ) );
ด้วยวิธีนี้ฉันได้จัดสรรอาร์เรย์ของโครงสร้าง หากคุณพยายามพิมพ์ เช่น ptr[4] คุณจะสังเกตเห็นตัวชี้ เมื่อฉันมีพอยน์เตอร์และเข้าถึงสมาชิกได้ ฉันต้องใช้ตัวดำเนินการ -> ใช่ไหม? แต่ถ้าฉันทำ:
ptr[4]->a
มันไม่ทำงาน! ฉันต้องทำ
ptr[4].a
เพื่อให้มันได้ผล... เพราะอะไร? ฉันมีตัวชี้! ptr[4] = (ptr+4) ใช่ไหม?
ในอาร์เรย์ปกติสิ่งนี้จะเกิดขึ้นเช่นกัน:
struct mystruct array[10];
array[4].a
แต่อาร์เรย์เป็นตัวชี้!
struct mystruct
ไม่ใช่ตัวชี้ - person davmac   schedule 10.03.2017ptr[4]
คือ*(ptr+4)
สังเกตว่า*
?ptr[4]
ไม่ใช่ตัวชี้ - person AnT   schedule 10.03.2017struct mystruct
ไม่ใช่อาร์เรย์struct mystruct *
... และ[ ]
ออฟเซ็ต และการอ้างอิง โดยให้โครงสร้างในอาร์เรย์ ไม่ใช่ตัวชี้ไป - person Dmitri   schedule 10.03.2017