问题是:
EdX 上的基础 C 编程 MOOC 展示了如何在通过指针传递结构时访问函数内的结构成员。 为什么他们在 *
旁边使用 &
???
它们显示:scanf("%lf", &(*studptr).aveGrade);
为什么不在 scanf 中使用 studptr.aveGrade
?
(撇开单独的问题,“为什么要使用 scanf”)
(被要求提供完整的例子)
void readStudent(struct student *studptr) {
print("\nEnter a new student record: \n");
printf("First name: ");
scanf("%s", (*studptr).firstName);
printf("Last name: ");
scanf("%s", (*studptr).lastName);
printf("Birth year: ");
scanf("%d", &(*studptr).birthYear);
printf("Average grade: ");
scanf("%lf", &(*studptr).aveGrade);
}
最佳答案
片段中:
scanf("%lf", &(*studptr).aveGrade);
&
运算符的应用就像有括号一样:
scanf("%lf", &((*studptr).aveGrade));
没有充分的理由优先使用 (*ptr).member
而不是 ptr->member
;事实上,显式间接表示法更冗长,而且当存在操作链时更是如此:
(*(*(*ptr).ptrmember).altptr).member
对比:
ptr->ptrmember->altptr->member
所以,代码应该是:
scanf("%lf", &studptr->aveGrade);
是的,两者是“等价的”,但箭头符号是惯用的 C 而另一个不是。
关于c - 为什么取消引用 C 中的引用?在 * 旁边使用 &,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59396211/