int **p怎么指向二维数组?
2个回答
展开全部
int a[SIZE][SIZE];
int **p = a;
这样是不行的
但是可以这样:
int**p = (int**)malloc(sizeof(int*)*SIZE);
for (int i = 0; i < SIZE; i++) {
p[i] = (int*)malloc(sizeof(int)*SIZE);
}
然后就可以这么用了 p[i][j]。
想要指向二维数组,必须定义一个指向一维数组的指针
int (*p)[SIZE] = a; 这样才能赋值。
int **p = a;
这样是不行的
但是可以这样:
int**p = (int**)malloc(sizeof(int*)*SIZE);
for (int i = 0; i < SIZE; i++) {
p[i] = (int*)malloc(sizeof(int)*SIZE);
}
然后就可以这么用了 p[i][j]。
想要指向二维数组,必须定义一个指向一维数组的指针
int (*p)[SIZE] = a; 这样才能赋值。
更多追问追答
追问
int a[SIZE][SIZE];
int **p = a;
为什么不行
int**p = (int**)malloc(sizeof(int*)*SIZE);
for (int i = 0; i < SIZE; i++) {
p[i] = (int*)malloc(sizeof(int)*SIZE);
}
这又是什么意思
追答
因为类型不相同,int**p是指向int指针的指针。而a是长度为SIZE的数组的数组,二维数组或者多维数组,类型中包含低维的数组SIZE的类型。类型不同的是不能赋值的。即使强制转换,也不能引用到正确的元素。
展开全部
int **p;本身就是2维的。指定数组指针的指针。
int a[10][20];
p=a;
int a[10][20];
p=a;
追问
听说不可以这样
追答
可以这样写,但使用时不能使用p[i][j]这种方式。也就是说,虽然**P是二2维的,但由于*p指向了数组中的数值,所以**P实际上指向的是由数组中的值所确定的地址中的值,通常情况下,会越界。
*((p+i*a[]长度)+j),这样会与a[i][j]取同样的值。
C的多维指针是个让人挠头的东西,即使是非常有经验的老程序员,也会经常被绕晕。所以说,如果想让你的代码让别人看不懂,那就使用多维指针吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询