问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

二维数组的内存布局详解

创作时间:
作者:
@小白创作中心

二维数组的内存布局详解

引用
CSDN
1.
https://blog.csdn.net/weixin_44319931/article/details/104703869

内存都是线性的,那么二维数组的存储是怎样的?

a[2][2]的内存布局如下图所示:

知道了内存分布,那么有一道例题:

int a[5][5];
int (*p)[4];
p = (int (*)[4])a;  //这里要强制转换,不然编译器会报错
printf("%d\n",&p[4][2] - &a[4][2]);

很明显a[5][5]的内存分布如下:

那p的内存分布呢?首先p是一个指针,是指向一个包含4个元素的数组的指针,并且当a作为右值赋给p时,a是作为数组首元素的首地址,也就是说,p的首地址就是a的首元素的首地址,即内存是重合部分的。如下图所示:

所以&p[4][2] - a[4][2]的答案就出来了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号