2013-06-22 32 views
0

有没有什么特别的原因,为什么当输入C(scanf)更喜欢取变量的内存位置而不是变量本身的名称? 我知道它的定义是什么? 但是有什么特别的原因吗? 就像在C++中,如果你想输入你会写cin >> var; 但为什么不在? 让语言更快一些吗?为什么在C输入需要变量的内存位置而不是变量本身的名称?

+9

由于C通过拷贝传递参数,而不使用指针,因此它不能修改对象。 – ouah

回答

5

这是因为在C值函数是按值传递。而且,当然,作为变量的编译语言名称在运行时并不存在,这是所有内存中的地址。

如果直接传递变量,你只是传递价值,这就是printf()需求:

int a = 32; 
printf("a=%d\n", a); 

,但如果你做同样的用的scanf()`是变化的来电者的变量的值,你传递变量的地址:

int a = 32; 
scanf("%d", &a); 

内。然后scanf()代码可以写在一个新的整数值给定地址,导致值在a中更改。

+0

我明白了你的观点并感谢你的回应。 但我的问题是为什么采取内存位置,而不是变量名称。 就像在C++中,如果你想输入你会写cin >> var; 但为什么不在? 让语言更快一些吗? – Harikesh

+0

@ user2511623 C++引入了引用,其中(非常粗暴地)仅仅是指针的语法糖。引用的基本原理('cin >>'使用的)与指针(scanf使用的)完全相同。 C没有引用,所以唯一的选择是指针。 – tom

+0

谢谢汤姆。 这是使得c比C++等更快的原因之一吗? – Harikesh

1

您需要通过引用传递的变量的scanf(),以使scanf()函数可以写在该地址的数据..

+0

-1,'scanf()'当然不会“将地址写入提供的指针”。 – unwind

+0

Ohhh ..我的头脑去了一些其他的宇宙一段时间。 – user2407394

+0

欢迎回来。 Downvote删除。 :) – unwind

相关问题