我是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", &current->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/

10-15 01:21