2
int b[3][2] = { {0, 1}, {2, 3}, {4, 5} };
int (*bpp)[2] = b;
int *bp = b[0];

在上面的代码中:是*bpp指向二维数组的指针吗?还是长度为 2 的指针数组?为什么*bpp用括号括起来?*bpp[2]和有区别(*bpp)[2]吗?

同时,在以下代码中:(更改数组的维度)

int i[4] = { 1, 2, 3, 4 };
int (*ap)[2] = (int(*)[2])i;

第二行让我很困惑,尤其是 typecasting (int(*)[2]),它到底是什么数据类型?

谢谢你^^

4

1 回答 1

3

bpp是一个指向两个数组的指针int*bpp是两个 的数组intint *bpp[2]将声明bpp为一个由两个指针组成的数组int(这个括号使它成为一个指向两个数组的指针int)。

(int(*)[2])是对指向两个数组的指针的强制转换int

这些可以通过考虑“声明遵循使用”规则(结合运算符优先级的知识)来阅读:

  dereference (so bpp is a pointer)
     |
     v
int (*bpp)[2]
 ^         ^
 |         |
 |  array index (so the thing that bpp points to is an array)
 |
 the thing on the left is the final type... here it is int,
 so the array is an array of int
于 2012-10-17T05:49:51.073 回答