一维数组名代表一维数组中首元素的地址,同时也代表整个一维数组。
Eg:int arr[3] = {1,2,3}//arr的类型是int *(注意这里不要说成是int [3]类型,因为arr是数组名,数组名代表数组首元素的地址,地址就是指针,指针的类型就是int *)
Int (*p) [3]= &arr//这里定义的是一个数组指针,他的本质就是指针,指向的类型必须是int [3]类型,arr此时代表整个数组,所以&arr就是将整个数组的地址给了p;注意arr的地址是与&arr一样的但是类型不一样,&arr代表整个数组,arr代表数组里面的首元素的地址。这是最标准的写法。
Int (*p)[3]= arr;这里由于两者类型不一样所以会报警告。
1.为什么说arr的类型是int (*)[3]而不是int [2][3]?
直接这里可以记住这个规律他这里问的是arr的类型,不是int arr[2][3]的类型,arr的类型是int (*)[3],int arr[2][3]的类型是int [2][3],这里问的是这个整体。
2.为什么说arr不是int**
如果arr的数据类型是int**,那么他指向的数据类型就是int *,那么他+1,应该移动8个(64os)/4个(32os)字节,然而!我们给arr+1,他移动了16个字节,移动了一个数组。所以,a指向的是一维数组(这个数组中有4个元素)