#include <stdio.h>
void main()
{
int *p;
int i,j;
int a[3][3]={{0,1,2},{3,4,5},{6,7,8}};
p=a;//编译时在此处会报标题中的警告,想知道具体是什么原因?求高人指教!
for(i=0;i<3;i++)
{
for( j=0;j<3;j++)
{
printf("%d\n",*p);
p++;
}
}
}
warning C4047: '=' : 'int *' differs in levels of indirection from 'int (*)[3]'
对于a[0][0]来说,它是第一行第一列的【元素】,所以类型是int
对于a[0]来说,它是第一【行】,所以类型是int [3]
对于a来说,它是整个矩阵,所以类型是int [3][3]
好,现在再来说指针
因为你也知道,在C语言里面指针和数组某种程度上说基本是一样的,于是
对于a[0][0]来说,它还是int
对于a[0]来说,它是int [3] 于是也可以是 int *,和p的类型相同
对于a来说,它是int [3][3] 于是也可以是 (int *)[3],用*对它解引用获得的是 int [3](于是它也可以是int *)于是类型和p相同了。
但是直接 p = a,类型不同,就出警告(在C++下是出错误)