二级C语言。

(27)若有定义语句:inta[4][10],*p,*q[4];且0≤i<4,则错误的赋值是()。A)p=aB)q[i]=a[i]C)p=a[i]D)p=&a[2][1]... (27)若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是( )。
A)p=a B)q[i]=a[i] C)p=a[i] D)p=&a[2][1]
答案是选择A。
为什么A错了,我感觉C也错了
展开
 我来答
灵七
2011-03-20 · 超过13用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:16.4万
展开全部
就如同处理字符串数组char a[4][10]={"Marry","Smith","John","Will"};
这时候a指向的是第一行的字符串"Marry",而不是指向的"M"
这时候可以认为a是一个字符串指针
那么如何将a指向M呢?就是用a[0]
a[0]作为一个指针,才是一个字符指针,指向的是第一个字符

回到问题上
a[4][10]是一个4行10列的二维数组
虽然a是指向的数组所占用的第一个存储单元
但是a实际指向的是第一行的所有内容的,包括了10个数值
所以把指向10个数值的a赋值给只指向int的p是错误的
而对于C)
a[i]指向的是二维数组中一个确定的元素,即一个int型的数值,p也是指向int型,因此类型相同可以赋值,C正确
1044906
2011-03-21
知道答主
回答量:53
采纳率:0%
帮助的人:26.9万
展开全部
你该仔细看看谭叔的书 a是个二维数组
a,a+1,等表示的是行指针 不是指向列的 而定义一个指向二维数组行的指针
要这样写才对
int a[4][10],(*p)[4];
p=a;
所以A是错的
而C为什么是对的
a[i]就是&a[i][0] 即i行0列的地址 是指向列的
C选项其实就是p=&a[i][0]
现在你看看不就是和D一个样子了吗?
如果你说C错 哪D不也错了吗?

PS:其实你最好把指向二维数组的指针搞明白 什么形式是指向行的 什么形式是指向列的 这种类型题目都不要思考就能做 楼上说的比我清楚,一看就是高手
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-03-24
展开全部
类型不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rdgahaehsartjh
2011-03-20
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
好难啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式