20分求大神帮忙分析一个C语言选择题

不光想知道问什么选D(参考答案),求分析一下每一个选项都代表什么意思。谢谢了。题目如下structst{intn;structst*next;};structsta[3]... 不光想知道问什么选D(参考答案),求分析一下每一个选项都代表什么意思。谢谢了。题目如下
struct st
{
int n;
struct st *next;
};
struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p
p=&a[0];
则一下表达式的值为6的是()
A.p++->n B.p->n++ C.(*P).n++ D.++p->n
展开
 我来答
无泪瓦擦
2012-06-18 · TA获得超过128个赞
知道答主
回答量:64
采纳率:0%
帮助的人:59.7万
展开全部
A:表达式值为5,然后p = &a[1];
B:先执行p->n,值为5,++ 是后缀式,所以表达式的值依然是5;
C:和B答案一样,表达式的值是5;
D:->的优先级高,所以先执行p->n,值为5,但是自增操作++ 为前缀式,所以先执行加1操作,表达式值为6;
故答案选D
追问
非--算术运算符--关系运算符--逻辑运算符,条件运算符--赋值运算符。这个优先性从高到低排序应该是对的吧,在这里  ->  优先性应该排在什么位置啊?
追答
( ) ,[ ],->,.
这四种运算符的优先级最高,排第一。
biosorry
2012-06-18 · TA获得超过7076个赞
知道大有可为答主
回答量:2546
采纳率:78%
帮助的人:821万
展开全部
p指向a[0],p->n=5
p++本身还是p,所以A.p++->n=5
p->n++ 本身还是p->n,所以B.p->n++=5
(*P).n++ 本身还是 (*P).n,所以C.(*P).n++ =5
++p->n本身表示(p->n)+1,所以D为6

需要了解a++与++a的不同,及运算符的优先顺序
追问
非--算术运算符--关系运算符--逻辑运算符,条件运算符--赋值运算符。这个优先性从高到低排序应该是对的吧,在这里  ->  优先性应该排在什么位置啊?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangweiipp
2012-06-18 · TA获得超过7043个赞
知道大有可为答主
回答量:4280
采纳率:0%
帮助的人:2780万
展开全部
首先定义了一个结构类型st,包括2个成员,第一个成员就是n,第二个成员就是指针变量,指向下一个st的地址。
然后定义了一个结构数组st a[3],然后*P指针,指向数组的第一个a[0],这里的a[0]={5,&a[1]},p->n=5的,就是第一个数组中第一个成员n=5。然后p->n是指针运算符是优先于++的,所以D的答案实际就是++(p->n)=++5=6,而B是5++=5,这个++前后顺序值得变化相信你应该是懂得的。A还是=5,因为p++>n,p是要先运算指针的,然后p的值增加1,指向下一个地址&a[1],C的话还是=5,那个一点.是结构成员运算符也是优于++的。那么p开始就是指向a{0},它的成员n=5,然后运算结束后,n=6,因为是后++
追问
非--算术运算符--关系运算符--逻辑运算符,条件运算符--赋值运算符。这个优先性从高到低排序应该是对的吧,在这里  ->  优先性应该排在什么位置啊?
追答
优先级是从上到下递减,看下面。
Turbo C运算符的优先次序
()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)┃ 最高
!(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址)┃
   *(指针所指内容) type(函数说明) sizeof(长度计算) ┃
     *(乘)     /(除)     %(取模)                        ┃ │
  +(加)     -(减)                                    ┃ │
  >(位右移)                     ┃ │
   (大于)   >=(大于等于)    ┃ │
     ==(等于)       !=(不等于)                          ┃ │     
&(位与)                                            ┃ │
^(位异或)                                          ┃ │
     |(位或)                
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清明大雪ss
2012-06-18 · 超过15用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:37.6万
展开全部
考的是运算符的优先级和指针的加减。
p原来指向a[0],p+1就指向a[1]。
选项A的值等于P->n,因为这里是后加。
B同样道理。比较简单。
C。*在这里是取内容,即去p所指的内容,你可以把取内容理解成是所指对象的另一个对象名,这里相当于a[0].n++,值当然是5。
D。 指针运算符优先级极高,高于左++,这里先得到变量值5,再加1,得6。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
war3baby
2012-06-18 · 超过16用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:42.5万
展开全部
打开c语言书,看关于指针的章节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式