首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言結構體struct完整入門指南

     編輯:關於C語言

結構體基本概念

結構體是將多個不同類型的變量組合成一個自定義類型,每個成員佔用獨立內存,總大小為成員大小之和(含對齊填充)。

1. 定義並聲明變量

struct Rec {
    int x;
    int y;
};

struct Rec r1;
r1.x = 111;
r1.y = 222;
printf("%d, %d", r1.x, r1.y); // 111, 222

2. 定義同時聲明多個變量

struct Rec { int x, y; } r1, r2;
r1 = {111, 222};
r2 = {333, 444};

3. 定義時直接初始化

struct Rec { int x, y; } r1 = {777, 888};
// 或帶字符串
struct Rec { char name[12]; short age; } r1 = {"ZhangSan", 12};

4. 先定義結構體類型,再聲明變量並初始化

struct Rec { char name[12]; short age; };
struct Rec r1 = {"ZhangSan", 12};

5. 聲明後為字符串成員賦值(需用 strcpy)

struct Rec { char name[12]; short age; };
struct Rec r1;
strcpy(r1.name, "ZhangSan");
r1.age = 18;

6. 匿名結構體(僅用於單次聲明)

struct { char name[12]; short age; } r1 = {"ZhangSan", 12};

7. 通過 scanf 輸入賦值

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 * 避免棧拷貝開銷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved