程序很简单,如下。但语句 p=a,编译时,出现了warning:assignment from incompatible pointer type。这个意思是指针类型不匹配?但数组和指针都是 int 型啊。还有,我再次编译,warning就消失了。我用的DEV C++编译。
还有,同样的程序,我用VC++ 6.0,直接出现 error:error C2440: '=' : cannot convert from 'int [3][4]' to 'int *'
int main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p;
p=a;
printf("%d",*p);
return 0;
}
但是,a和a[0],是相同的。所以,既然 可以 p=a[0],那就应该可以 p=a
追答从数值的角度上来说你说的是对的!
但编译器是要检查类型匹配的
a是二维数组首地址,也是第一行的首地址,也是第一个元素的地址
a[0]是第一行的地址,也是第一个元素的地址
a[0][0]是第一个元素
从数值上讲a a[0] 甚至&a &a[0] &a[0][0] 都是相同的,但其表示的意义是不同的,也就是编译器要检查的类型匹配问题。 编译器为了最大程序保证编译出来的代码可靠运行,所以会进行相应的检查!
但是,a和a[0],是相同的。所以,既然 可以 p=a[0],那就应该可以 p=a
而且,DEV C++编译时,是通过的,只有一个warning而已。
呵呵,可能你说的是对的,但在vs2010里是通不过的。我不知道dev c++这么高级的编译器。