问题描述
- scanf("%s",&a);与scanf("%s",a);的区别是什么? 为什么下面的两个都正确?
-
第一个
char a[1000];
scanf("%s",&a);
printf("%sn",a);
system("pause");第二个
char a[1000];
scanf("%s",a);
printf("%sn",a);
system("pause");
为什么上面两个运行结果都正确?
解决方案
对数组来说a数组首元素的地址和&a都指向数组的首地址,这两个地址值上来说一样。
scanf接收一长串字符后,都按这个地址一一往后填字符,a[1000]对应的字符就是相同的。
但是a和&a的区别在于地址偏移上&a+1是数组首地址+sizeof(a),也就是指向a数组a[1000]的后面了,而a+1指a[0]+1也就是a[1]代表的地址
解决方案二:
&是占位符的作用
第一个因为是字符串数组,这里的scanf("%s",a);中的a既是一个地址,也是一个数组变量名,也可以是一个指向字符型变量的指针,不过前面有%s,所以可以说 定义时:char a[50]第二个是一般变量 &在这里: 为取地址运算符定义时:int a
解决方案三:
scanf理论上只要取存放数据的地址。但是对于数组有点特殊。它的地址或者数组名都可可以作为地址来处理字符串。所有这里巧合的可以,但是对于其它类型,比如int,char,就需要取地址&
解决方案四:
对于数组,都正确。对于单个变量就不行了。
因为数组中 a a[0] &a[0] 和 &a 都是返回a[0]的地址
时间: 2024-11-03 20:54:26