C语言简单习题:struct st {int n; struct st *next;};。。。。。

structst{intn;structst*next;};structsta[3]={5,&a[1],7,&a[2],9,&a[0]},*p;p=&a[0];则值为6的... struct st {int n; struct st *next;};
struct st a[3]={5,&a[1],7,&a[2],9,&a[0]},*p;
p=&a[0];
则值为6的表达式是
A、p ++ ->n
B、 p->n ++
C、 (*p).n ++
D、 ++ p->n
答案是什么?为什么?
展开
 我来答
b_spike
推荐于2016-09-28 · TA获得超过3686个赞
知道大有可为答主
回答量:3724
采纳率:78%
帮助的人:1137万
展开全部
选D
首先必须确定一点,就是->运算符比++运算符的优先级要高,然后,别忘了++在变量前和变量后的区别
按照这个算4个表达式的值
表达式A 等同于p->n 然后p=p+1,表达式值是p自增之前p->n的值也就是5
表达式B 首先计算p->n的值,也就相当于a[0].n(值是5),然后执行(a[0].n)++,注意是先取值再自增,因此表达式的值还是5
表达式C 首先计算(*p).n,那就相当于a[0].n(值是5),然后执行(a[0].n)++就跟表达式B一样了,表达式的值还是5
表达式D 是正确的,相当于++(a[0].n),值是6
追问
struct st {int n; struct st *next;};
struct st a[3]={5,&a[1],7,&a[2],9,&a[0]},*p;
p=&a[0];这几句话是什么意思?
追答
第一行:定义一个结构体类型st,里面包含两个成员:一个整数型成员n,一个指针(引用)类型成员next,这个指针用于指向结构体类型st的变量
第二行:定义一个包含3元素的st结构体类型的数组a,三个元素分别为{5,&a[1]},{7,&a[2]},{9,&a[3]}。(每个元素中,第1个成员对应n,第2个成员对应next)后面还定义了一个可以指向st结构体类型变量的指针p
第三行:使st类型的指针p指向st类型数组a的第1个元素的地址(首地址)
21世纪吕布
2021-07-21
知道答主
回答量:30
采纳率:0%
帮助的人:6138
展开全部
答案是:D,下面已经把解读和代码发上来了,不能理解的,自动去编译验证下。
#include<stdio.h>
void main(void)
{
struct st{ int n; struct st *next;};

//结构体类型st,两个成员:一个整数型成员n,一个指针(引用)类型成员next,这个指针用于指向结构体类型st的变量
struct st a[3]={5,&a[1],7,&a[2],9,&a[0]},*p;

//定义一个包含3元素的st结构体类型的数组a,三个元素分别为{5,&a[1]},{7,&a[2]},{9,&a[3]}。
//(每个元素中,第1个成员对应n,第2个成员对应next)后面还定义了一个可以指向st结构体类型变量的指针p
p=&a[0];//p指向st类型数组a的第1个元素的地址(首地址)

//则值为6的表达式是

//p ++ ->n //p->n指向5,先取值自增为6++=6
//p->n ++ //p->n指向5,先取值自增为6++=6
//(*p).n ++//同上
//++ p->n //把指向p->n值5++=6
printf("%d\n",++ p->n);
}
/*
表达式A 等同于p->n 然后p=p+1,表达式值是p自增之前p->n的值也就是5
表达式B 首先计算p->n的值,也就相当于a[0].n(值是5),然后执行(a[0].n)++,注意是先取值再自增,因此表达式的值还是5

表达式C 首先计算(*p).n,那就相当于a[0].n(值是5),然后执行(a[0].n)++就跟表达式B一样了,表达式的值还是5
表达式D 是正确的,相当于++(a[0].n),值是6
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
woshizjp
2015-06-25 · TA获得超过351个赞
知道小有建树答主
回答量:322
采纳率:100%
帮助的人:315万
展开全部
个人觉得这个题好像有点问题,因为除了A选项之外,都是值为6.
首先说下p,p是结构体指针,指向数据的第一个元素。
选项A:p++->n,根据优先级应该先执行p->n,然后执行p++。所以实际上是把指针p指向了a[1].
选项B:p->n++,首先取值p->n,即5,然后++则为6.
选项C:(*p).n,得到5,然后++,值同样为6.
选项D:++p->n,根据优先级顺序,首先取值p->n,得到5,然后执行++,同样得到为6.
追问
struct st {int n; struct st *next;};
struct st a[3]={5,&a[1],7,&a[2],9,&a[0]},*p;
p=&a[0];这几句话是什么意思?
追答
第一行表示定义一个结构体。
第二行,定义一个结构体数组a[3],然后分别赋值5,7,9,并且三个结构体构成一个环链表。
第三行P指向结构体数组a[3]的第一个数值a[0]。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式