c语言 char s【3】【10】,(*k)【3】,*p;则以下赋值语句正确的是 a)p=s

c语言chars【3】【10】,(*k)【3】,*p;则以下赋值语句正确的是a)p=sb)p=kc)p=s【10】d)k=s答案是c怎么得出... c语言 char s【3】【10】,(*k)【3】,*p;则以下赋值语句正确的是 a)p=s b)p=k c)p=s【10】 d)k=s 答案是c怎么得出 展开
 我来答
戚文柏Ro
2014-01-16 · TA获得超过336个赞
知道小有建树答主
回答量:400
采纳率:100%
帮助的人:402万
展开全部
估计你应该是二维数组与指针分不清楚,分析如下:
char s[3][10]; //先看s[3],s包含3个元素的数组,即s为指向3个元素的指针,3个元素分别为s+0,s+1,s+2; 再看右边的[10],说明这个3个元素中,每个元素又包含10个元素,即(s+0)[0]、(s+0)[1]....(s+0)[9],(s+1)[0]、(s+1)[1]....(s+1)[9],(s+2)[0]、(s+2)[1]....(s+2)[9];从整体看s[3]为指针,即char*,s[3][10]为具体的值,即char。那么(s+0)[0]、(s+0)[1]....(s+0)[9],(s+1)[0]、(s+1)[1]....(s+1)[9],(s+2)[0]、(s+2)[1]....(s+2)[9];是具体的30个char;二维数组就是指向指针的指针,即char **s;
分析结果:
A. p=s; //错,p为指向char的指针,而s为指向指针的指针,char **;
B. p=k; //错,p为指向char的指针,而k为指向含有三个元素的数组,其实可k也是char **;
C. p=s[10]; //错,p为指向char的指针,s[10] <=> (s+0)[10]是一个字符,但是s[10]越界了,所以这个也是错误的.
D. k=s; //错,看AB的分析,也许你认为是对的,都是char**,但是他们指向的元素不同,k指向的是包含3个元素的数值,而s指向的是包含10元素的数组,所以不正确.
总结:数组的名字就是首地址,分析指针或数组,通过优先级来分析.以上没有正确答案.
橙心橙愿
2014-01-16 · TA获得超过1033个赞
知道小有建树答主
回答量:460
采纳率:100%
帮助的人:226万
展开全部
首先p是一个char* 指针,而s是一个二维char*指针相当与char**所以排除a
(*k)[3]这是一个数组指针,b选项类型不一致
d选项 k是数组指针,s是二维指针类型不一致排除
只有c选项p和s[10]都是都是char*指针
有问题请追问
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Rankabc
2014-01-16 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1065万
展开全部
char s[3][10]; //这是一个二维数组,对应的二维指针为(*k)[10],所以A、B错
p=s[10]是指向行的首地址的指针,相等于p=s[0][10],也是指向s[3][10]的指针,所以C对
没有k=s这种表示方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式