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

Jim*_*hse 2 c pointers scanf pass-by-reference ampersand

我看着这个这个这个这个等等。

问题是

EdX 上的基本 C 编程 MOOC 展示了如何在通过指针传递结构时访问函数内结构的成员。他们到底为什么在&旁边使用*???

他们展示: scanf("%lf", &(*studptr).aveGrade);

为什么不只studptr.aveGrade在 scanf 中使用?

撇开单独的问题,“为什么要使用 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);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 8

在片段中:

scanf("%lf", &(*studptr).aveGrade);
Run Code Online (Sandbox Code Playgroud)

&运营商应用好像有括号:

scanf("%lf", &((*studptr).aveGrade));
Run Code Online (Sandbox Code Playgroud)

没有充分的理由(*ptr).member优先使用ptr->member; 实际上,显式间接表示法更加冗长,当存在操作链时更是如此:

(*(*(*ptr).ptrmember).altptr).member
Run Code Online (Sandbox Code Playgroud)

对比:

ptr->ptrmember->altptr->member
Run Code Online (Sandbox Code Playgroud)

所以,代码应该是:

scanf("%lf", &studptr->aveGrade);
Run Code Online (Sandbox Code Playgroud)

是的,两者是“等价的”,但箭头符号是惯用的 C,而另一个则不是。


Fed*_*oca 5

因为&不是指(*stupdtr),它指的是(*studptr).aveGrade。该.经营者具有更高的优先级。