int a[4][10],*p,*q[4];
a的类型:int [4][10],a是一个有4个元素的一维数组,每个元素又是有10个int型数据的一维数组
本质上 C语言是没有多维数组 的!请楼主记住。
所以a的首元素是a[0],a是首元素a[0]的地址,即a = &a[0]
千万不要认为a是首元素a[0][0]的地址,而写成a = &a[0][0],酿成笑话!
请记住:a的首元素是a[0],以后学习多维数组及指针的时候不会再有困惑!
p的类型:int *
q的类型:int *[4]
再看,a[i]是什么类型?很简单,int [10]!一个一维数组!
q[i]呢?int *是也!
重点来了:为什么q[i] = a[i] ?搞不懂了吧?!
(声明:以下是我个人的独创分析法,原创哦,献丑了!)
其实我们看看一维数组和一维指针的定义你就明明白白了
int A[10];
int *Q;
Q = A; >>> 明白了吗?一位数组可以赋值给一维指针。(仅限一维!)
但多位数组不可以赋值给多位指针,切记啊!
再看我们的问题:q[i] = a[i] ?
因为 (a[i]) 是一维数组(加上括号是因为a[i]作为一个整体,记住:a是所谓的二维数组!);
而 (q[i]) (也是作为一个整体)的类型是int *即指针。所以两者可以赋值!
总结一下:找类型方法,去掉名字就可以了!
对于数组,int a[4][10],a的类型,去掉名字得int [4][10];a[i]的类型,去掉a[i]得int [10]!
对于指针,其实一样的。