首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言結構體指標:何時加 * 何時用 -> 詳細解析

     編輯:程式設計綜合問答

程式碼情境

typedef struct Stu {
    char name[20];
    int age;
} Stu;

Stu student[5] = { ... };
void sortedByName(Stu *p, int count) {
    // 比較姓名
    if (strcmp((p + j)->name, (p + j + 1)->name) > 0) { ... }
    // 交換結構體
    Stu temp = *(p + j);
    *(p + j) = *(p + j + 1);
    *(p + j + 1) = temp;
}

核心概念

  • p 是 Stu*,指向陣列首元素。
  • p + j 也是 Stu*,指向第 j 個元素。
  • (p + j)->name 等同 (*(p + j)).name,已取得 char*(字串指標),**不需再加 *****。
  • 交換時 *(p + j) 解參考取得 Stu 實體,才能進行整結構體賦值。

口訣

  1. **存取成員** → 用 ->(指標)或 .(實體),**不用 ***。
  2. **整體賦值/複製** → 需解參考 *ptr 取得實體。
  3. **指標運算** → p + j 仍是指標,*(p + j) 才是實體。

範例對照

Stu stu1 = {"Alice", 20};
Stu *p = &stu1;
p->name;      // 正確:指標存取成員
(*p).name;    // 正確:解參考後存取
*p = stu1;    // 正確:整體賦值
// *p->name;  // 錯誤:優先級等同 *(p->name),name 是 char[] 無法解參考
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved