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

# 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不是代表数组的首地址么? 求解释?
最新回答
酒色清浅

2025-06-18 11:23:01

呃,楼主."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]);
晚安旧恋人

2025-06-18 16:01:20

一维数组名等价于一个指针,二位数组名等价于指向指针的指针。
所以换成p = *a就行了。。。
雨后初见彩虹

2025-06-18 08:49:22

一个是int*,一个是int**
不同的。
&a[0][0]是int*
a是int**