int a[2]={1, 2};
int b[1][2]={1, 2};
int * p1=a;//这里可以
int * p2=b;//为什么这里就不行?同样都是数组名,而且数组名代表数组第一个元素的地址,为什么二维
数组这里就不能赋给指针呢?
需要接收数据的变量与值变量(或常量)是相同类型才可以
变量与值变量(或常量),这句不懂。
int (*p2)[2] = b ; //
我理解这里的意思是:定义一个指针p2,该指针指向一个有2个元素的数组。
但是不明白为什么这样就能将b赋给p2呢?
p2只是定义了一个指向一个数组的指针啊?但是b是二维数组啊。
(1)
int a = 5 ; //a是接收数据的变量 5是常量
int b=a ; //b是接收数据的变量 a是变量
这样的赋值要求等号两边的类型要一致。就是表达这样一个意思。
(2)
b是二维数组名,是数组的首地址,也是第一行的地址 (先理解了这句话)
p2是定义了一个指向一个"数组"的指针 这个”数组“与b二维数组的列数是相同的,即p2指针与二维数组第一行的地址 是一个类型的,所以可以赋值!(结合上面,好好思考一下)
int b[2][3]={1,2,3, 4,5,6}
对于二维数组b来说,还可以把它看成是由 b[0]、b[1]、b[2]这些“元素”组成的一维数组
int (*p)[3] = b;//所以赋值成功
是这样吗?
int b[2][3]={ {1,2,3},{ 4,5,6}} 标准初始化是这样!表示两行三列
可以看也是b[0] b[1]为元素组成的数组!
所以 int (*p)[3] = b;//所以赋值成功 ! 是这样子