定义一个指针数组,这个数组名也是字符常量么,但为什么可以被另外一个数组名赋值?

例如:
int x[4][3] ={0};
int (* p)[3] ; //这里p是一个以指针为元素的数组的数组名吧。。。
p = x ; //为什么可以执行这步操作

如果是指针,就可以被赋值。int (*p)[3] 是定义一个指向数组的指针,所以能被改变初始值 。 P 说白了,其实就是三个指针。而不是数组。
就像 int i[3] 中的 i[0],i[1],i[2]不一样,是可以被修改的。
如果是数组名,则被看做常量,所以不能修改其初始值的。

int (*p)[3] 是定义一个指向数组的指针,p=x是把二维数组x的初始地址给p指针数组;
比如
int x[4];i
nt *p;
p = x;
这样的话,意思是p指向x[0]

p是四个由三个数值串组成的,自然可以这么赋值。。

x是常量,但p是变量,所以可以将x值赋予p

指针指向地址,这样当然没问题了

p是指针,p = x ; 是将数据x的首地址给了p