#include"stdio.h"
struct st
{
int n;
struct st *next;
};
void main()
{
struct st a[3],*p;
a[0].n=5;
a[0].next=&a[1];
a[1].n=7;
a[1].next=&a[2];
a[2].n=9;
a[2].next='\0';
p=&a[0];
}
则以下值为6的表达式是:
A.p++->n B.p->n++ C.++(*p).n D.++p->n
我觉得C和D都对,可答案给的是D,compile的结果也是C和D都对,请大侠指教,谢谢
C语言结构体数组中元素的引用,指向结构体的指针和运算符的优先级和结合性的问题,高手帮忙
答案:4 悬赏:40
解决时间 2021-02-23 16:15
- 提问者网友:枯希心
- 2021-02-22 17:02
最佳答案
- 二级知识专家网友:废途浑身病态
- 2021-02-22 17:53
我也运行了下,全是6
也不太清楚是怎么回事
不过我想如果不是题目有问题的话那应是D比C更好一些
因为C和D中的运算符优先级是这样的:C中最高的是成员访问符然后才是括号然后是前自增然后是解引用,编译器应该是把括号认为是最高优先级的了,括号内算完后再算外边的,因为如果严格按照优先级的话最先的应该是.可是在括号没运算出来前.是无效的,所以说C编译的结果理论上不准确吧,D就很中规中矩的答案了。
个人感觉题目有问题的可能大一点,毕竟如果说学C++的理论无法用于实践学着也没用哈,所以实践更重要一些。
如果强要说只有D是对的话只有那一个解释了
参考书上是找到优先级的地方
也不太清楚是怎么回事
不过我想如果不是题目有问题的话那应是D比C更好一些
因为C和D中的运算符优先级是这样的:C中最高的是成员访问符然后才是括号然后是前自增然后是解引用,编译器应该是把括号认为是最高优先级的了,括号内算完后再算外边的,因为如果严格按照优先级的话最先的应该是.可是在括号没运算出来前.是无效的,所以说C编译的结果理论上不准确吧,D就很中规中矩的答案了。
个人感觉题目有问题的可能大一点,毕竟如果说学C++的理论无法用于实践学着也没用哈,所以实践更重要一些。
如果强要说只有D是对的话只有那一个解释了
参考书上是找到优先级的地方
全部回答
- 1楼网友:输掉的尊严
- 2021-02-22 20:50
gcc 编译器运行结果是C D都可以
- 2楼网友:桃花别处起长歌
- 2021-02-22 20:24
呵呵,在C中先是运行(*p)里面的内容然后(*p).n,后++。
D也是从右往左运行的,两个一样。
- 3楼网友:堕落奶泡
- 2021-02-22 19:12
你好!
显然 C.D答案都是正确的。这不是编译器的问题,是给的答案就有错误。。无论什么C编译器,C语言的语言是没有冲突的,优先级也是如此。要相信自己。
如有疑问,请追问。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯