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

标签 c pointers scanf pass-by-reference ampersand

我看了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/

相关文章:

C++ include头文件问题

c - 读取套接字时的奇怪行为

c++ - 函数将返回一个字符串,其中包含两个索引之间的部分

c - (初级程序员)需要帮助 : Linked Lists in C

c++ - 复制抽象基类的对象

c - 为什么在请求用户再次输入后字符数组为空?

c - gets 和 mmap 的问题

c - Windows 是否有一个好的 Valgrind 替代品?

c - 在原点和用户给定的旋转点处相对于其坐标保持相同的三角形?

c - 使用正则表达式解析以分号分隔的字符串