struct Rec {
int x[3]; // 固定大小數組作為成員
int y;
} r1;
r1.x[0] = 11; r1.x[1] = 22; r1.x[2] = 33;
r1.y = 99;
數組成員內嵌於結構體內存中,非指標,隨結構體整體複製/傳遞。
struct Rec1 { int x, y, z; };
struct Rec2 {
int ID;
struct Rec1 num; // 嵌套結構體變量
} R;
R.num.x = 1; // 訪問嵌套成員
struct Rec {
int ID;
struct { // 匿名結構體類型
int x, y, z;
} num; // 變量名 num
} R;
兩種方式內存佈局相同,匿名方式更緊湊、封裝性更強。
struct Rec {
int x, y;
struct Rec *next; // 指向同類型結構體的指標
} *p = NULL, *pFirst = NULL, *pPrec = NULL;
for (int i = 0; i < 10; i++) {
p = malloc(sizeof(struct Rec));
p->x = i;
p->y = i * i;
p->next = NULL;
if (!pFirst) { // 首節點
pFirst = p;
pPrec = p;
} else { // 尾插
pPrec->next = p;
pPrec = p;
}
}
p = pFirst;
while (p) {
printf("%d,%d\n", p->x, p->y);
p = p->next;
}
p = pFirst;
while (p) {
pPrec = p;
p = p->next;
free(pPrec);
}
struct Rec (含數組) struct Rec (鏈表節點) +----------+----------+ +----------+----------+----------+ | x[0] | x[1] | | x | y | next * | → 下一節點 | x[2] | y | +----------+----------+----------+ +----------+----------+ (next 存儲下一節點地址)
struct Rec next; 會導致無限遞歸大小,編譯錯誤。free 逐個釋放,防止內存洩漏。結構體支援數組成員(內嵌存儲)、嵌套結構(組合建模)與自引用指標(構建鏈表、樹等動態數據結構)。掌握這三種模式,即可在 C 語言中構建任意複雜的數據模型,是系統編程、數據結構實現的基石。