c - 使用 & 运算符时 scanf() 中发生了什么?

标签 c pointers struct operators

我是 C 编程的新手,对以下几行代码有疑问。这发生在创建结构电影链接列表的上下文中:

struct film {
    char title[TSIZE];
    int rating;
    struct film * next;
}

int main(void)
{
    struct film * head = NULL;
    struct film * prev, *current;
    char input[TSIZE]; 

    // some code ommitted

    strcopy(current->title, input);

    puts("Enter your rating <0-10>");

    scanf("%d", &current->rating);
}

基本上我的问题是关于 strcopy() 和 scanf() 函数的。我注意到对于 strcopy,第一个参数是在指向结构的指针上使用成员访问运算符 ->。我相信 strcopy 的第一个参数应该是一个指向 char 的指针,所以当使用成员访问运算符时,即使 title 没有被声明为结构内部的指针,我们是否会得到一个指向 title 的直接指针?

我很困惑这与我们使用 & 运算符获取 current->rating 地址的 scanf() 调用有何不同。 scanf() 是获取结构指针的地址然后进行成员访问还是结构成员“rating”的地址?为什么不像 strcopy() 那样直接传入指针?

我想 ¤t->rating 与 &(current->rating) 之间有区别吗? ¤t->rating 是指针的地址(有点像指向指针的指针?)。

提前致谢。

最佳答案

当您在 C 中将数组作为函数参数传递时,编译器实际上将指针传递给数组中的第一个元素。 arrayVar&arrayVar[0]相同.所以,strcopy函数的第一个参数是指向字符数组 title 第一个元素的指针在 current 指向的结构中.

当你传递 int 时对于函数,您只是传递变量的值,而不是指向它的指针。自 scanf需要一个指针来存储值,你必须使用 &而是获取指向变量的指针。 scanf 的第二个参数是一个指向整数 rating 的指针在 current 指向的结构中.

关于c - 使用 & 运算符时 scanf() 中发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7375668/

相关文章:

c - c中串口读取,使用WinApi函数; WaitCommEvent 失败

c - 如何在不交换数据的情况下交换两个节点

c++ - 了解 ARM 汇编指令和 C/C++ 指针

c - 与结构一起使用时 calloc 的初始值

c - 在普通 c 中使用 "struct"的问题

c - 使用 gcc 获取二进制文件中不带路径的文件名

c - void函数(C语言)

c - C中可变大小的二维数组

c - 如何在不使其成为全局的情况下共享硬件抽象结构

在 TCL 代码中从 C (example.i) 调用函数