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

C 語言結構體指針訪問成員錯誤修正:. 與 -> 操作符的正確使用場景

     編輯:程式設計綜合問答

編譯錯誤原因

代碼中 p 為 struct student*,訪問成員需用 ->,而非 .。
*(p+i).number 錯誤 → (p+i)->number 或 p[i].number。

修正後的關鍵函數

void input(struct student *p) {
    for (int i = 0; i < n; i++) {
        printf("enter student%d's number,name,3 scores:", i+1);
        scanf("%ld %s %f %f %f", 
              &(p[i].number), p[i].name, 
              &(p[i].s1), &(p[i].s2), &(p[i].s3));
        p[i].average = (p[i].s1 + p[i].s2 + p[i].s3) / 3.0;
    }
}

struct student max(struct student *p) {
    int maxIdx = 0;
    for (int i = 1; i < n; i++)
        if (p[maxIdx].average < p[i].average) maxIdx = i;
    return p[maxIdx]; // 返回結構體副本
}

void print(struct student s) {
    printf("number=%ld, name=%s, score1=%.2f, score2=%.2f, score3=%.2f\n",
           s.number, s.name, s.s1, s.s2, s.s3);
}

操作符速查表

對象類型訪問成員示例
結構體變量.stu.name
結構體指針->p->name
結構體指針數組[] 後用 .p[i].name
類靜態成員::Class::staticMember

補充:C 與 C++ 結構體差異

C 語言需 struct student 或 typedef struct { ... } Student;,C++ 直接用類名。建議統一使用 C++ 風格。

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