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

C 語言結構體完整入門:定義、typedef、初始化三種方式與指標存取成員

     編輯:關於C語言

C 語言結構體完整入門:定義、typedef、初始化三種方式與指標存取成員

1. 定義語法

// 方式一:標準定義
struct Teacher {
    char name[64];
    int age, id;
};

// 方式二:typedef 別名 (推薦)
typedef struct Teacher {
    char name[64];
    int age, id;
} Teacher; // 現在可直接用 Teacher 當型別

// 方式三:匿名結構體 + 變數 (罕用)
struct { char name[64]; int age; } t1, t2;

2. 初始化三種方式

// 1. 定義後賦值
Teacher t1;
t1.age = 30; strcpy(t1.name, "王老師");

// 2. 定義時初始化 (順序必須匹配)
Teacher t2 = {"李老師", 35, 102};

// 3. 指定成員初始化 (C99,順序任意、可跳過)
Teacher t3 = {.name = "張老師", .id = 103}; // age 自動為 0

3. 指標存取成員

Teacher t = {"A", 20, 1};
Teacher *p = &t;

// 兩種等價寫法
p->age = 21;          // 箭頭運算子 (慣用)
(*p).age = 21;        // 解參考後用點運算子

// 陣列指標
Teacher arr[3];
Teacher *pa = arr;
for (int i=0; i<3; ++i) {
    printf("%s\n", pa[i].name);      // 陣列下標
    printf("%s\n", (pa+i)->name);    // 指標算術
}

4. 結構體記憶體佈局

  • 成員按宣告順序排列,位移由編譯器計算 (含對齊填充)。
  • sizeof(Teacher) ≥ 成員大小總和。
  • offsetof(Teacher, age) (stddef.h) 獲取位移。

5. 實務建議

  • 慣用 typedef 簡化型別名稱。
  • 大型結構體傳遞函數用指標 void func(const Teacher *t) 避免拷貝開銷。
  • 字串成員用固定陣列 char name[64] 簡單,或 char *name 配合動態分配靈活。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved