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

0<=i<4inta[4][10],*p,*q[4];下列错误赋值的是:A,p=aB,q[i]=a[i]cp=a[i]Dq[i]=&a[2][0]分别解释下呗答案为A... 0<=i<4
int a[4][10],*p,*q[4];
下列错误赋值的是:
A,p=a B,q[i]=a[i] c p=a[i] D q[i]=&a[2][0]
分别解释下呗
答案为A
展开
 我来答
chenqa08
2012-02-21 · TA获得超过275个赞
知道答主
回答量:105
采纳率:0%
帮助的人:110万
展开全部
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]!
对于指针,其实一样的。
it伴随01
2012-02-19 · 超过29用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:138万
展开全部
int* p 类型是 int*
int a[4] 类型是int []
p=a//这种情况下是对的
int a[4][10] 类型是 int a[][]
int* q[4]类型是 int (*)[4]
A,p=a 错误是因为获取不了地址
B,q[i]=a[i] D q[i]=&a[2][0]//二维数组的每行的地址可以被数组指针接受
c p=a[i] //p获取的把二维数组分拆为俩个数组,把一个数组元素的地址赋给p
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangdebo321
2012-02-19 · TA获得超过203个赞
知道小有建树答主
回答量:262
采纳率:100%
帮助的人:196万
展开全部
A,**p,则p=a,
B,q为指针数组,a[i]为二维数组行的指针。对
C,同B
D,q[i]指向a[2][0],类型相同正确。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式