关于数组和指针的关系的理解
本帖最后由 TomZz 于 2022-9-24 13:59 编辑请教一下大佬我的理解是正确的吗?
// 设array为二维数组。int
// 数组向指针的自动转化会自动降一维,从*(array+i)=array可理解。即如果把array看成一个指针,其类型应为int *
// 数组手动转化为指针维度不变。&array的类型应为int *
// 因而array+1的内存是加了数组子元素的size,&array+1在内存中是加了整个数组的size
以下为我的测试代码
int main() {
int a = { {1,2},{3,4},{5,6},{7,8} };
int (*p)[] = &a; // 第一个下标不填会警告下标不同
int (*b) = a+1; // 这里只是声明,没有去访问是不知道其具体内容的,所以调试时会先呈现问号,在访问后会呈现具体内容
printf("%p %p %d %p %p %p %d %p %p", a, a, a, p, *p, **p, ***p, a + 1, b);
return 0;
}
结果貌似证明了我的猜想。
数组array的地址为00000077EA0FFA78 ,array+1的地址为00000077EA0FFA80,&array+1的地址00000077EA0FFA98
array+1与array差8个字节即2个int即一个int的size;&array+1与array差32个字节即一个int的size 事这个样子的(喜 事这个样子的(喜
突然有个想法,用结构体数组替代二维数组更好?用起指针来也更友善{:10_254:}
页:
[1]