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

C 語言結構指針進階:數組指針算術、函數參數傳遞效率與實戰範例

     編輯:關於C語言

結構指針訪問三種等價形式

boy[1].score
(*ps).score
ps->score

ps 為 struct stu *,指向結構/數組元素首地址。注意:(*ps).score 括號不可省(. 優先級高於 *)。

結構數組指針算術

struct stu boy[5], *ps;
ps = boy;        // 指向 boy[0]
ps + 1;          // 指向 boy[1](自動跨越 sizeof(struct stu) 字節)
ps + i;          // 指向 boy[i]

與普通數組指針一致,編譯器自動處理步長。

範例:指針遍歷結構數組輸出

struct stu *ps;
for (ps = boy; ps < boy + 5; ps++)
    printf("%d\t%s\t%c\t%f\n", ps->num, ps->name, ps->sex, ps->score);

禁忌:ps = &boy[1].sex; ❌ 不能指向單一成員,只能指向整個結構/元素。

結構指針作函數參數:效率躍升

ANSI C 允許結構值傳遞,但會逐成員拷貝(含數組),開銷大。最佳實踐:傳指針,僅傳遞地址(4/8 字節)。

對比範例:計算平均分與不及格人數

void ave(struct stu *ps) {
    int c = 0, i; float s = 0;
    for (i = 0; i < 5; i++, ps++) {
        s += ps->score;
        if (ps->score < 60) c++;
    }
    printf("avg=%f, fail=%d\n", s/5, c);
}
main() { struct stu *ps = boy; ave(ps); }

全程指針算術(ps++、ps->member),無數組下標開銷,速度更快、代碼更緊湊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved