永发信息网

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

答案:4  悬赏:40  手机版
解决时间 2021-03-07 20:34
比如 int a[3] = {2,3,4};
为什么 printf("%d,,%d\n",a,&a); 输出的是同一个值?难道首地址和首地址的地址相同吗?
最佳答案
其实你这个疑问是概念上的混淆,或者说对指针了解上上的欠缺

首先讲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;这时编译器肯定报错,绘制出数据类型不一致,那么你这样样定义就没有问题:int (*q)[3] = &a;这时如果你再对q进行++操作,那么加的就不同了,如相面的p++操作后p的值会加4,而这里q++操作后的值会加12,也就是跳过3个数组元素,然而,确实这两个指针的初始值是一样的,只是类型不一样而已,这对二维数组的访问时很方便的,这个你可以参照2维数组得到进一步理解,讲的有点乱,不知道你能不能理解
全部回答
不是的。但对于数组来说,数组名存的就是数组的首地址,所以你这样输出的两个才会是相同的。
%p 直接用16进制地址形式输出地址 %d 把地址直接用10进制形式输出 char a[] = "hellow c++"; int b[] = {0x01,0x02,4,0x08,0}; 如上数组如下输出都可以: printf("十进制地址%d 十六进制地址%p", a, a); printf("十进制地址%d 十六进制地址%p", b, b); printf("十进制地址%d 十六进制地址%p", &a[0], &a[0]); printf("十进制地址%d 十六进制地址%p", &b[0], &b[0]);
一个数组的数组名就代表了这个数组在存储器中存储的首地址。 汇编中: MOV DPTR,#TABLE TABLE: 20H,30H,40 MOV DPTR,#TABLE ;这里就是把定义的数组TABLE当作立即数赋给寄存器DPTR
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
马上要期末考试了,我总觉得我会考不好.
我想建一个养200头羊的棚子:不知要多少钱可以
请教一个计算机网络问题:为什么信号在时间轴
卸妆时皮肤过敏怎么办?
牛黄清心丸所去的“心火”和一般情况下我们所
宁波地铁现在共建成几号路线
阿拉伯地区含量最丰富的自然资源是什么
关于risk的用法 risk有哪些常用句型
行政复议期间,下列情形中,行政复议中止的有
为什么打印机只能打印word文档而不能打印exce
新星房产在哪里啊,我有事要去这个地方
【zhongqiujie】Tomorrow is Zhongqiujie.We
六十六分之五十五化成最简分数
宜昌到黄冈有多远?
中国农业银行(高新区支行)(双月园路中国农业
推荐资讯
跪求沪江swf播放器0.3
家养兔子的繁殖速度?
乐视手机怎么重装系统
诺丽果酵素第二天果就黑色了
实木复合地板铺好以后过多久保养
如图,已知大圆的直径是20厘米,则阴影部分的面
吃海鲜后容易长痘痘怎么办
我过了三十数感觉自己老了很多,,周围的人说
没有得到却又很想拥有,当拥有却又无所谓所谓
从杭州到广州的空调特快动车T169号上的硬座有
穿41码或42码鞋的男生,一般身高有多高
梦见杀很多人
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?