C语言中整形数组的首地址的地址?

[复制链接]
查看11 | 回复3 | 2010-8-28 10:35:45 | 显示全部楼层 |阅读模式
比如 int a[3] = {2,3,4};
为什么 printf("%d,,%d\n",a,&a); 输出的是同一个值?难道首地址和首地址的地址相同吗?

回复

使用道具 举报

千问 | 2010-8-28 10:35:45 | 显示全部楼层
其实你这个疑问是概念上的混淆,或者说对指针了解上上的欠缺首先讲int a[3] = {2,3,4};这里的a是这个数组的首地址,比如定义如:int *p = a;这时如果你进行如下操作:p++;printf("%d\n",*p);结果会是输出2,也就是说p+1相当于数组索引加1,但是像你所问的为什么&a和a是相同的 ,首先要知道他们分别代表什么意思,a:像上面所说的是数组的首地址,做自加运算会根据数组类型来计算偏移量,那么&a是什么东西呢,实际上它也是一个指针,是指向一个具有3个元素的数组的指针,如何理解,看以下定义:如果你定义int *q = &a;这时编译器肯定报错,绘制出数据类型不一致,那么你这样样定义就没有问题:
回复

使用道具 举报

千问 | 2010-8-28 10:35:45 | 显示全部楼层
不是的。但对于数组来说,数组名存的就是数组的首地址,所以你这样输出的两个才会是相同的。
回复

使用道具 举报

千问 | 2010-8-28 10:35:45 | 显示全部楼层
一个数组的数组名就代表了这个数组在存储器中存储的首地址。汇编中:MOV DPTR,#TABLE TABLE: 20H,30H,40 MOV DPTR,#TABLE ;这里就是把定义的数组TABLE当作立即数赋给寄存器DPTR
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行