请教:二级指针怎么和一个二维数组联系起来

来源:百度知道 编辑:UC知道 时间:2024/06/15 02:58:49
char a[x][y];
用数组名:第i行 第j列
可以表示为 *(a+i)+j

那用二级指针怎么将它们联系起来?
在c中用如下(只是部分程序):
int a[3][4];
int *p;
p=a;
系统怎么会报错?
但是如果p=&a[0][0];
系统又同意这样的代码?

int a[3][4];
int *p;
p=a; ====>解释:(此处显然不正确了。因为a是一个二级指针,p是一级指针,肯定会报错了。)
系统怎么会报错?
但是如果p=&a[0][0]; ====>此处当然可以了。解释:(a[0][0]指的二维数组中的第一个元素,而&a[0][0],是取第一个元素的地址,是一个一维地址,那它赋给p当然可以了。)
系统又同意这样的代码?
------------------------

上面的“解释”,希望你能看的明白。再想给你补充一点。
一般在做二维数组的时候,可将其转成一维数组来做。
如下:
int a[3][4];
int *p;
p=(int*)a;//这就可以了,转成一维数组能使你更容易理解。

char **p;
p=a;
*(p+i)+j

多维数组只能这样使用:

int a[3][4];
*(*(a+1)+2) = 0;

int (*pa)[4] = a;
*(*(pa+1)+1) = 1;

int c[3][4][6];
int (*pc)[4][6] = c;

直接赋值给 int **p = a; 是不行的!

直接强制转换。
p = (int*)a;