鱼C论坛

 找回密码
 立即注册
查看: 1689|回复: 2

[技术交流] 关于数组和指针的关系的理解

[复制链接]
发表于 2022-7-4 10:50:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 TomZz 于 2022-9-24 13:59 编辑

请教一下大佬我的理解是正确的吗?
// 设array为二维数组。int[4][2]
// 数组向指针的自动转化会自动降一维,从
*(array+i)=array[i]
可理解。即如果把array看成一个指针,其类型应为int[2] *
// 数组手动转化为指针维度不变。&array的类型应为int[4][2] *
// 因而array+1的内存是加了数组子元素的size,&array+1在内存中是加了整个数组的size

以下为我的测试代码
int main() {
        int a[4][2] = { {1,2},{3,4},{5,6},{7,8} };
        int (*p)[][2] = &a;        // 第一个下标不填会警告下标不同
        int (*b)[2] = a+1;        // 这里只是声明,没有去访问是不知道其具体内容的,所以调试时会先呈现问号,在访问后会呈现具体内容
        printf("%p %p %d %p %p %p %d %p %p", a, a[0], a[0][0], p, *p, **p, ***p, a + 1, b);
        return 0;
}

结果貌似证明了我的猜想。
数组array的地址为00000077EA0FFA78 ,array+1的地址为00000077EA0FFA80,&array+1的地址00000077EA0FFA98
array+1与array差8个字节即2个int即一个int[2]的size;&array+1与array差32个字节即一个int[4][2]的size
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-4 20:11:44 | 显示全部楼层
事这个样子的(喜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 13:43:18 | 显示全部楼层
事这个样子的(喜

突然有个想法,用结构体数组替代二维数组更好?用起指针来也更友善
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 08:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表