我是C编程新手,有一个关于下面几行代码的问题。这发生在创建struct film的链接列表的上下文中:
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的第一个参数是在指向结构的指针上使用member access操作符->的。我相信strcopy的第一个参数应该是指向char的指针,所以当使用成员访问操作符时,即使title未声明为结构内的指针,我们是否得到指向title的直接指针?
我很困惑这与scanf()调用的不同之处,在scanf()调用中,我们使用&operator获取current->rating的地址。scanf()是获取结构指针的地址然后进行成员访问,还是它是结构成员“rating”的地址?为什么不像strcopy()那样传入指针呢?
我能想象一下“做”和“电流”->“额定值”和“电流”->“额定值”之间有什么区别吗?¤t->对指针的地址进行评级(有点像指向指针的指针?).
提前谢谢。
最佳答案
当您在C语言中将数组作为函数参数传递时,编译器实际上会将指针传递给数组中的第一个元素。arrayVar
与&arrayVar[0]
相同。因此,strcopy
函数的第一个参数是指向title
所指结构中字符数组current
的第一个元素的指针。
当您将int
传递给函数时,您只是传递变量的值,而不是指向它的指针。因为scanf
需要一个指针来存储值,所以必须使用&
来获取指向变量的指针。scanf
的第二个参数是指向rating
所指结构中整数current
的指针。
关于c - 使用&运算符时,scanf()中会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7375668/