C++ 二维数组 数组名到底是什么??

来源:百度知道 编辑:UC知道 时间:2024/06/05 01:51:20
//定义一个二维数组
char a[20][10]={..... };
//定义两个指针
char* p1=0;
char** p2=0;
//然后进行如下任意一种操作都无效
p1=a;
p2=a;
//这到底是为什么?????

呵呵,a是这样一种类型:*a[10],所以,你得这样做
char *p[10]=a;
以后p[i][j]就合法了。或者说,你可以认为p和a一样了。

p2 = a是可行的, 但是编译是通不过的, 这是c的语法规则造成的。

类型兼容的变量间才可以互相赋值, 比如 char[] 是可以赋给 char*的, 而指针之间只有当他们指向的类型 **相同** 的时候他们才兼容。这里就被这个规则挡住了 char* 和 char[]虽然几乎一样但可惜并不相同 。。。 其实还有更恶心的, 比如 long * 和 int * ,怎么看都是一回事,但语法上就是过不去