笑话大全网 - 爆笑笑话 - C语言指针数组的问题 刚刚有点错误

C语言指针数组的问题 刚刚有点错误

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]!

对于指针,其实一样的。