C/C++数组初始化程序问题

bob*_*bob 2 c c++ arrays

有人可以解释我为什么这样做:

int x[4] = { 0, 1, 2, 3 };
int *p = x;
Run Code Online (Sandbox Code Playgroud)

但做不到:

int x[2][2] = { 0, 1, 2, 3 };
int **p = x;
Run Code Online (Sandbox Code Playgroud)

有没有办法能够分配给**p [] []?

TIA

caf*_*caf 8

指向int的指针int *可以指向整数数组中的整数,这就是为什么第一个是OK的原因;

int x[4] = { 0, 1, 2, 3 };
int *p = x;
Run Code Online (Sandbox Code Playgroud)

这使得px[0],在第一INT x.

指向指向int int **的指针可以指向指向int的指针数组中的指针指向int.但是,您的第二个数组不是指向int的指针数组; 它是一个数组数组.这里没有指针到整型,所以没有什么理智点int **p的.您可以通过两种方式解决此问题.第一种是更改类型p,使其成为指向2-array的数组:

int x[2][2] = { 0, 1, 2, 3 };
int (*p)[2] = x;
Run Code Online (Sandbox Code Playgroud)

现在p指着x[0],第一个int [2]x.

另一种方法是创建一些pointers-to-int指向:

int x[2][2] = { 0, 1, 2, 3 };
int *y[2] = { x[0], x[1] };
int **p = y;
Run Code Online (Sandbox Code Playgroud)

现在p指着y[0],这是第一个int *y. y[0]反过来指向x[0][0],并y[1]指向x[1][0].