代碼中 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 語言需 struct student 或 typedef struct { ... } Student;,C++ 直接用類名。建議統一使用 C++ 風格。