|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 TomZz 于 2022-9-24 13:59 编辑
请教一下大佬我的理解是正确的吗?
// 设array为二维数组。int[4][2]
// 数组向指针的自动转化会自动降一维,从可理解。即如果把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 |
|