有什么特别的原因,为什么在输入C(scanf)时更喜欢采用变量的内存位置而不是变量本身的名称? 我知道上面强制要求的scanf的定义? 但有什么特别的理由吗? 就像在c ++中一样,如果你想输入,你会写cin>> var; 但为什么不呢? 是否能让语言更快?
答案 0 :(得分:5)
这是因为C中函数的值是按值传递 。当然,作为变量的编译语言名称不会在运行时存在,它在那时就是内存中的所有地址。
如果直接传递变量,只需传递printf()
需要的值:
int a = 32;
printf("a=%d\n", a);
但如果您对scanf()', it would just get the integer value
执行相同操作32 , with no idea where it came from. Since the point of
scanf()`是更改调用者变量的值,则传递地址变量:
int a = 32;
scanf("%d", &a);
然后scanf()
内的代码可以在给定的地址处写入一个新的整数值,这会导致值在a
中更改。
答案 1 :(得分:1)
您需要通过引用scanf()传递变量,以便scanf()可以在该地址写入数据。