我是 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", ¤t->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/