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

C語言結構體陣列與指標存取:三種引用方式完整比較

     編輯:關於C語言

結構體陣列指標存取三大法

假設 struct stu student[4] 為結構體陣列,struct stu *p = student; 指向陣列首元素。

方法語法說明
陣列下標法student[i].member最直觀,直接用索引
指標算術法(p+i)->memberp+i 指向第 i 元素,-> 解參考存取成員
指標陣列表示法p[i].memberp[i] 等價 *(p+i),再用 . 存取

完整範例程式碼

struct data { int day, month, year; };
struct stu {
    char name[20];
    long num;
    struct data birthday;
};

main() {
    int i;
    struct stu *p, student[4] = {
        {"liying", 1, {1978,5,23}},
        {"wangping", 2, {1979,3,14}},
        {"libo", 3, {1980,5,6}},
        {"xuyan", 4, {1980,4,21}}
    };
    p = student;  // 指向陣列首地址

    printf("1----Output name, number, year, month, day\n");
    for (i = 0; i < 4; i++)
        printf("%20s %10ld %10d //%d//%d\n",
            (p+i)->name, (p+i)->num,
            (p+i)->birthday.year, (p+i)->birthday.month,
            (p+i)->birthday.day);
}

輸出結果說明

程式以指標算術法 (p+i)->member 遍歷輸出四筆學生資料,包含姓名、學號、生日(年/月/日)。巢狀結構體 birthday 成員同樣透過 -> 逐層存取。

指標存取優勢

  • 函數傳遞陣列時,傳指標 p 即可,配合長度參數,靈活高效。
  • 指標算術 p++ 可依序走訪陣列,無需索引變數。
  • 結合動態記憶體配置(malloc),可建立大小可變的結構體動態陣列。

常見錯誤提醒

  1. p+i 需加括號 (p+i)->member,否則優先級錯誤。
  2. p[i].member 中 p[i] 已解參考,故用 . 而非 ->。
  3. 指標型別必須與陣列元素型別完全一致(struct stu *),否則指標算術位移錯誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved