c primer plus中scanf()把一个字符串读进一个字符数组中为什么不要使用&

如题所述

scanf()把一个字符串读进一个字符数组中,语句如下:
char
str[100];
scanf("%s",
str
);
//这里的str就是数组的首地址,%s表明,输入1或多个字符到这个地址中去。
scanf()函数要求参数必须是对应的地址类型,str本身就是地址,所以,不用加&了。
&是取变量地址符,如果在输入数值类,如:%d
%c
%f等数据时,因为,这种变量一般为普通变量,所以,要加&来取地址,以保证读入数据正确。学到指针时,就会清楚些了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-21
scanf函数的接收形式参数必须是对应变量的地址。在接收字符串时对应形式参数的类型是char
*型,一个char型数组的首地址刚好是char
*型,也就是下标为0的那个元素的地址,若数组名是a,则a、&a[0]都可以。那么用了&a会怎么样呢?也不会有问题!因为,&a是这个数组的地址,即&a+1将跳过这个数组而不像a+1只指向下标为1的元素;虽然&a和a的性质差别如此大,但它两的值是相等的,都是第0个元素的地址;C的函数在接收实参时要把实参的类型“自动强制为形参的类型(只指能够被强制的一部分,不能强制的编译时要报错)”;这里本应用a的,用了&a,调用时会把&a的类型自动强制为a的类型,所以不必担心出错……
相似回答
大家正在搜