c 数组中&问题?char a[]; scanf("%s",a);与scanf("%s",&a);有区别吗?

如题所述

在char a[10];,a和&a只是值相等,其性质是完全不同的,a是a[0]元素的地址&a[0],a+1就是a[1]的地址&a[1]了;而&a是整个数组a的地址,&a+1就跳过这个数组了,是a[10]所在的地址了。你可以用printf("%p %p\n",a+1,&a+1);来检查它们的性质。但在有的编译器下,char a[];scanf("%s",a);与scanf("%s",&a);的效果是一样的,比如VC++6.0。这不能不说是这类编译器的一个bug。C是一种语法比较松散的语言,有不少边缘化的细节没有规定统一的解释,造成了不同的编译器有不同的解释。知道有这么回事就行了,写代码时提倡写意义明确的表示法,如本例提倡前者而不提倡后者。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-18
&只是取址符号。你写的那两个第一个没问题,第二个&冗余了!
如果只是普通整形或者字符变量scanf赋值要带&,即取变量地址;数组就不一样了,数组地址是连续的,而且数组名就默认数组首地址,因此如果都是从数组第一位开始赋值的话上述两个就没有区别。如果你想从第三位开始赋值就该写成scanf("%s",&a【2】);这个&必须有
第2个回答  2013-10-18
就值而言,a 和 &a 是完全一样的。
第3个回答  2013-10-18
偶也认为其实是一样的,不然为什么Java里面没指针了呢,而且功能强劲
相似回答