gpt4 book ai didi

c - 为什么取消引用 C 中的引用?在 * 旁边使用 &

转载 作者:行者123 更新时间:2023-12-01 15:02:45 26 4
gpt4 key购买 nike

我看了thisthisthisthis等等。

问题是:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com