|
发表于 2017-1-3 09:37:50
|
显示全部楼层
向来喜欢用一图流解释,首先看原代码:
- int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- int (*p)[10] = &array;
复制代码
解析p:
p是一个指向 int [10]的指针,跨度就是一个含10个int元素的数组,实际上就是4*10字节。和&array代表的意思一样。
*p是指向一个int元素的指针,跨度是int的占位宽,即4字节。和array代表的意思一样。
所谓“左右[ ]内的数值一样”的理由就是,跨度必须一样,类型才相同,左右才能对齐。
那么,我们修改代码,让[ ]内左右不同(编译时候会警告,提示左右类型不同,暂时无视!)代码如下:
- int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- int (*x)[4] = &array;
复制代码
解析x:
x是一个指向 int [4]的指针,跨度是4*4字节,即16字节。
*x是一个指向int元素的指针,跨度是4字节。
我觉得我能说明的,也就这么多了。能理解就好,不能理解再换其他解释。 |
|