c语言中error C2440: '=' : cannot convert from 'int [5][6]' to 'int *'

#include<stdio.h>intmain(void){inta[5][6];intm,n;inti=10;int*p;for(m=0;m<5;m++){for(n... # include <stdio.h>
int main(void)
{
int a[5][6];
int m,n;
int i = 10;
int *p;
for (m = 0;m<5;m++)
{
for (n = 0;n<6;n++)
{
a[m][n] = i;
i++;
}
}
p=&a[0][0];
for (m = 0;m<5;m++)
{
for (n=0;n<6;n++)
{
printf("a[%d][%d]=%d ",m,n,*(p+(5*m)+n));
}
printf("\n");
}
return 0;
}
把下面p=&a[0][0];换为p = a;就么问题,什么原因
说错了,把p = a 换成 p = &a[0][0];就没问题 这是什么原因,a不是代表数组的首地址么? 求解释?
展开
 我来答
郁_诗
推荐于2018-03-23 · TA获得超过493个赞
知道小有建树答主
回答量:155
采纳率:100%
帮助的人:209万
展开全部
呃,楼主."p = a;"这语句是不合法的,两个类型相同的指针才能进行赋值的.

a是二维数组指针常量,p是一维指针,类型明显不一样嘛...

如果要使"p = a;"这语句合法,那么应该这样定义p:

int (*p)[6]; //看声明先看变量名,然后由右往左看.如果遇到括号则先看括号里的.所以这声明是说:p是个指针(p的右边是括号,所以先看括号里的.'*'即代表是个指针),这指针指向一个数组(括号看完后就往右看),该数组有6个int型元素.即p为数组指针(后面两个字说明它是指针,前面两个字说明它指向一个数组.就像我们说美女一样,后面一个字说明它是女人,前面一个字才说明它是美丽的.如果是指针数组则说明它先是个数组,然后它的元素为指针,那么该定义为:int *p[6])

如果你的程序中用"p = a;",那么下面的printf语句应改为:

printf("a[%d][%d]=%d", m, n, p[m][n]);
匿名用户
2013-03-10
展开全部
一维数组名等价于一个指针,二位数组名等价于指向指针的指针。
所以换成p = *a就行了。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2976c9b
2013-03-10 · TA获得超过1555个赞
知道小有建树答主
回答量:934
采纳率:0%
帮助的人:707万
展开全部
一个是int*,一个是int**
不同的。
&a[0][0]是int*
a是int**
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式