㈠ printf和scanf函数为什么一个要取地址符一个不用呢
你用scanf输入的时候,是要在函数内对变量值进行修改的。
而printf输出的时候,只用到变量的值,不必在函数内改变变量的值。
如果是普通的函数参数传递,比如传递a,变量接收的方式是在函数内另外建立一个变量,假设是b,然后把a的值传递给b就可以了。这样如果对b的值进行修改,不影响原来的a。
传地址则可以通过操作改变实参的值,比如把a的地址p1传递到函数中,函数中p2接收到了a的地址,因为p2指向的是a的地址,所以对p2地址指向的内容修改,就对原来的变量a修改了
㈡ 为何在C语言中的scanf()中要用到取地址符,而printf()中却不用
scanf意思是从键盘输入数据,从键盘得到字符,放到某个变量里,当然要它的地址了;printf意思是输入某个变量的内容,只要知道变量名就行了。我个人认为是不是为了符合人的思考习惯。
另外,c语言开发时就这么规定的,没有太多的为什么,当初人家发明c语言时说scanf需要加地址符,那咱们用的时候就得加,当初人家发明c语言时说scanf不需要加地址符,那咱们用的时候自然就不用加了。
㈢ 为什么输出函数不需要用取地址符&而输入函数需要用取地址符&呢
因为输入函数再给相应的数据类型输入数值的需要找到其变量名对应分配的地址,再在地址上写上数值。而输出函数就不需要找到对应的地址书写,直接通过变量名读出相应的数值。。。
㈣ c语言 scanf();为什么要用取地址符
scanf(“格式控制字符串”, 地址表列);
其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。
例如:&a、&b分别表示变量a和变量b的地址。
这个地址就是编译系统在内存中给a、b变量分配的地址。在C语言中,使用了地址这个概念,这是与其它语言不同的。 应该把变量的值和变量的地址这两个不同的概念区别开来。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。
变量的地址和变量值的关系
在赋值表达式中给变量赋值,如:
a=567;
则,a为变量名,567是变量的值,&a是变量a的地址。
但在赋值号左边是变量名,不能写地址,而scanf函数在本质上也是给变量赋值,但要求写变量的地址,如&a。这两者在形式上是不同的。&是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。
㈤ 输入变量a要取地址,输入字符串为什么不用取地址
因为对于数组a[10],首地址就是a。这个a表示的就是数组的首地址,所以不用取地址了。