使用' scanf',在第二个参数中使用变量或指针有什么区别?

时间:2015-08-04 09:08:37

标签: c scanf

scanf的第二个参数中使用变量或指针有什么区别。

例如:

scanf("%f",&r);

VS

scanf("%f",r);

1 个答案:

答案 0 :(得分:4)

将值传递给任何函数时,会在函数调用之前复制该值。该函数使用副本,然后在函数返回时丢弃该副本。

scanf需要将其结果放在某个地方,您可以在函数返回后将它们取回。因此,你不要给它任何东西的任何一次性副本。相反,您可以告诉事物的位置,以便它可以在那里存储用户的输入。那是一个指针。简而言之:您始终将指针传递给scanf

但是,根据值的类型,指针将以不同的表示法显示。也就是说,如果您正在扫描整数i,例如int类型,则必须将i的地址(=变换为指针)在它前面添加一个amperstand:scanf("%d",&i);。而如果您正在扫描字符串s,则其类型为char*已经指向字符缓冲区的指针(请注意字符缓冲区中的尾随星号)类型)。缓冲区的地址是scanf所期望的,因此不需要取消引用:scanf("%s",s);