結構體指標的值(即結構體首地址)等於其第一個成員的地址。 這是 C 標準保證的記憶體佈局規則(前提:結構體非空、無位欄位導致對齊調整)。
#include <stdio.h>
struct A {
int arr[100];
};
int main() {
struct A a;
struct A *pA = &a;
printf("pA = %p\n", (void*)pA);
printf("&a.arr[0] = %p\n", (void*)&a.arr[0]);
printf("pA == &a.arr[0] ? %s\n", pA == (void*)&a.arr[0] ? "true" : "false");
return 0;
}
pA = 0x7ffc12345670
&a.arr[0] = 0x7ffc12345670
pA == &a.arr[0] ? true
offsetof 巨集:`結構體指標「包含」的是整個結構體的起始位址,透過成員偏移量即可存取任意成員。理解這一點,對掌握 C 語言記憶體模型、實作泛型資料結構至關重要。