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

Using 'scanf', what is the difference between having a variable or pointer in the second argument?

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

例如:

scanf("%f",&r);

scanf("%f",r);

当您将值传递给任何函数时,该值会在函数调用之前被复制。该函数使用副本,然后在函数 returns.

时丢弃该副本

scanf 需要把它的结果放在某个地方,你可以在函数返回后取回它们。因此,您不会给它任何东西的任何一次性副本。相反,您告诉这些东西在哪里,这样它就可以在那里存储用户的输入。那是一个指针。简而言之:您总是 将指针传递给scanf

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