int **p怎么指向二维数组?

 我来答
jackwind1987
推荐于2017-11-25 · TA获得超过2738个赞
知道大有可为答主
回答量:1268
采纳率:50%
帮助的人:492万
展开全部
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 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的类型。类型不同的是不能赋值的。即使强制转换,也不能引用到正确的元素。
pardream941026
2013-01-13 · TA获得超过8217个赞
知道大有可为答主
回答量:4602
采纳率:89%
帮助的人:1339万
展开全部
int **p;本身就是2维的。指定数组指针的指针。
int a[10][20];
p=a;
追问
听说不可以这样
追答
可以这样写,但使用时不能使用p[i][j]这种方式。也就是说,虽然**P是二2维的,但由于*p指向了数组中的数值,所以**P实际上指向的是由数组中的值所确定的地址中的值,通常情况下,会越界。

*((p+i*a[]长度)+j),这样会与a[i][j]取同样的值。
C的多维指针是个让人挠头的东西,即使是非常有经验的老程序员,也会经常被绕晕。所以说,如果想让你的代码让别人看不懂,那就使用多维指针吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式