結構體是將多個不同類型的變量組合成一個自定義類型,每個成員佔用獨立內存,總大小為成員大小之和(含對齊填充)。
struct Rec {
int x;
int y;
};
struct Rec r1;
r1.x = 111;
r1.y = 222;
printf("%d, %d", r1.x, r1.y); // 111, 222
struct Rec { int x, y; } r1, r2;
r1 = {111, 222};
r2 = {333, 444};
struct Rec { int x, y; } r1 = {777, 888};
// 或帶字符串
struct Rec { char name[12]; short age; } r1 = {"ZhangSan", 12};
struct Rec { char name[12]; short age; };
struct Rec r1 = {"ZhangSan", 12};
struct Rec { char name[12]; short age; };
struct Rec r1;
strcpy(r1.name, "ZhangSan");
r1.age = 18;
struct { char name[12]; short age; } r1 = {"ZhangSan", 12};
struct Rec { char name[12]; short age; } r1;
printf("name: "); scanf("%s", r1.name); // 字符串無需 &
printf("age: "); scanf("%d", &r1.age); // 非指針類型需 &
printf("Name: %s; Age: %d", r1.name, r1.age);
struct Demo {
char c; // 1 byte
// 3 bytes padding
int i; // 4 bytes
short s; // 2 bytes
// 2 bytes padding
}; // 總大小通常為 12 bytes (視編譯器對齊策略)
可用 #pragma pack(n) 或屬性 __attribute__((packed)) 控制對齊,但可能降低訪問性能。
void Rec_Init(Rec *r, const char *name, short age)。const Rec * 避免棧拷貝開銷。