三位数组:int a[2][2][3]
表达式 | 步长 |
---|---|
&a + 1 |
sizeof(int) * 2 * 2 * 3 |
a + 1 、a[1] |
sizeof(int) * 2 * 3 |
*a + 1 、a[0] + 1 、a[0][1] |
sizeof(int) * 3 |
**a + 1 、a[0][0] + 1 、a[0][0][1] |
sizeof(int) |
当对一个数组(以上述a
为例)取地址时,得到相当于这个数组的指针,即:
1 | int ****ptr = &a; |
相当于一个 a[2][2][3]
的指针,步长为 sizeof(int) * 2 * 2 * 3
。
默认 a[2][2][3]
中 a + 1
的步长是除第一个下标外的数组字节,即不管第一个下标 2
。每次对 a
用 *
解引用,或者加上数组 [x]
,步长依次除以前面一个下标长度。
例如 b[5]
,b + 1
的步长就是 sizeof(int)
,和第一个下标长度 5
无关。
测试代码:
1 |
|