C (scanf) 在获取输入时更喜欢获取变量的内存位置而不是变量本身的名称有什么特别的原因吗? 我知道上面规定的 scanf 的定义是什么? 但是有什么特别的原因吗? 就像在 C++ 中一样,如果你想接受输入,你会写 cin>>var; 但为什么不在? 是为了让语言变得更快吗?
最佳答案
这是因为 C 中函数的值是按值传递的。当然,作为一种编译语言,变量名称在运行时并不存在,此时它都是内存中的地址。
如果直接传递变量,传递的只是值,这是printf()
需要的:
int a = 32;
printf("a=%d\n", a);
但是如果你对 scanf()' 做同样的事情,它只会得到整数值
32,而不知道它是从哪里来的。由于
scanf()` 的目的是更改调用方变量的值,因此您传递变量的地址:
int a = 32;
scanf("%d", &a);
然后 scanf()
中的代码可以在给定地址处写入一个新的整数值,这会导致 a
中的值发生变化。
关于c - 为什么在 C 输入中需要变量的内存位置而不是变量本身的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17250727/