首页 > 试题广场 >

设有以下程序段,则值为6的表达式是( )。 struct s

[单选题]

设有以下程序段,则值为6的表达式是()。

struct st { int n; struct st *next;};

static struct st a[3]={5,&a[1],7,&a[2],9,0 } ,*p;

p=&a[0];

  • p++->n
  • ++p->n
  • p->n++
  • (*p).n++
A选项错误,p++->n 是 5,等同于“p->n; p++”
B选项正确,++p->n 是 6,因为 -> 的优先级高于 ++ 的,所以等同于“++(p->n)”
C选项错误,p->n++ 是 5,这里是先返回 p->n 的值,再给 p->n 自增,输出还是 5
D选项错误,(*p).n++ 是 5,之所以是 5 的原因和 C 选项一样,也是先返回了 (*p).n 的值,然后才是自增
(注:因为 . 的操作符优先级高于 * 的,所以此处括号是必须的)
发表于 2017-05-23 09:46:43 回复(2)
->优先级高于++
发表于 2017-11-28 21:15:26 回复(0)
p是一个地址,&是取地址运算符。
p=&a[0]    将a[0]的地址赋值给了p。
a[0]代表的是一个st类型的结构体,a[0]={5,&a[1]}
那么p->n = 5
发表于 2018-05-02 20:16:21 回复(0)
B吧
发表于 2022-04-10 15:38:04 回复(0)
因为 -> 的优先级高于 ++ 的,所以等同于“++(p->n)”
发表于 2019-03-31 23:07:28 回复(0)
struct st是一个结构体,里面存放的是成员变量是本身的n值,和下一个值的地址 a[3]完成了初始化,第一个元素是5,&a[1],第二个元素是7,&a[2],第三个元素是9,0地址 然后在定义了一个结构体指针p 然后让p指向&a[0]也就是a[3]的第一个元素 此时看A选项,p++->n,这句其实可以理解为p指向的n,然后执行后置加加,后置加加返回的值是个临时变量,是5,但是n其实变成了6,但是返回的值是5所以错误 B选项,++p->n,这句其实可以理解为p指向的n,然后执行前置++,前置加加执行之后返回的是该变量本身,所以这个返回的是6,答案正确 C选项,p->n++,D选项,(*p).n++这两个其实和A选项很像,找到n之后执行后置++,这样的返回值依然是5 所以选择B
发表于 2019-03-25 10:51:08 回复(0)
A选项错误,p++->n 是 5,等同于“p->n; p++” B选项正确,++p->n 是 6,因为 -> 的优先级高于 ++ 的,所以等同于“++(p->n)” C选项错误,p->n++ 是 5,这里是先返回 p->n 的值,再给 p->n 自增,输出还是 5 D选项错误,(*p).n++ 是 5,之所以是 5 的原因和 C 选项一样,也是先返回了 (*p).n 的值,然后才是自增 (注:因为 . 的操作符优先级高于 * 的,所以此处括号是必须的)
发表于 2018-12-02 10:24:05 回复(0)
->优先级高于++;
因此先执行->,再执行++;
发表于 2017-08-03 10:28:59 回复(0)
(*p).n=p->n
编辑于 2017-07-05 15:16:09 回复(0)
考虑题目给的数没有6,所以++操作肯定应该在后面(´・_・`)
发表于 2017-06-13 16:33:51 回复(2)