字符串数组名代表什么

#include<stdio.h>intmain(){chara[10];scanf("%s",&a);printf("%x\n",a);printf("%x\n",&a... #include<stdio.h>
int main()
{
char a[10];
scanf("%s",&a);
printf("%x\n",a);
printf("%x\n",&a);
return 0;
}
为什么结果是一样的? 难道 &a 也代表的是数组第一个字符的地址吗?
展开
 我来答
CodeBlove
推荐于2017-09-08 · TA获得超过3364个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:242万
展开全部
答对了。

其实任何变量的名称代表的都是变量地址,这点学校和教科书不会说的。

举例
int a,b=10;
a=b;

将b赋值给a的操作细节是:
取a和b的地址(直接寻址)
取将b地址中的值
复制保存到a的地址中。

对于普通变量(单个变量),包括指针变量,编译器遇到赋值运算会自动取值,这叫隐式转换。

而对于数组,如果只给出数组名,编译器不会直接取第一个元素,因为它无法确定你要取第几个元素,因此编译器不会自动处理(取值),返回的就是数组名的地址,也就是第一个元素的地址。

而只有当你指定一个索引,才相当于普通变量的取值,而取值过程是:
先取数组地址,在利用索引计算元素位置,然后取值。

因此对于数组a,使用数组名时, int *p=&a 和 int *p=a效果是一样的,前者是显式访问,后者是隐式访问。

C++难,我觉得不仅仅是难在指针上,而是很多隐含的自动转换,因为很多隐式转换不同编译器处理不同,所以让很多初学者很头痛。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式