首页 > 试题广场 >

请为横线处选择合适的程序

[不定项选择题]
下列程序的运行结果是 3, 5,请为横线处选择合适的程序( )
#include <stdio.h>

struct S
{
    int n;
    char c[10];
} *p;

int main()
{
    struct S a[3] = {{3, "abc"}, {5, "def"}, {7, "ghi"}};
    p = a;
    printf("%d,", (*p).n);
    printf("%d\n", ______);

    return 0;
}
  • (++p) -> n
  • (a+1) -> n
  • p++ -> n
  • (p+1) -> n
粗心大意,真不该错!
发表于 2018-08-07 19:26:52 回复(0)
更多回答
ABD,
A 选项如果把括号去掉,运算结果就会变成4.因为成员选择符->优先级比前置++、后置++都要高。
C 选项p++->n中加括号"(p++)->n"或者不加括号,运算结果都是3。
《C专家编程》中讲过,++a是取a的地址,增加它的值,再写入寄存器中,而a++是取a的地址,将它的值装入寄存器,再增加它的值。因此可以解释为什么C选项加不加括号结果都一样。
编辑于 2017-06-14 01:09:29 回复(2)
p中存放a的地址(相当于首元素地址)
A:++p相当于加到a[1],(++p)->n == 5
B:a为首元素地址,+1,相当于加到a[1],(a+1)->n == 5
C:p后++,这时p还是在a[0],p++->n ==3
D:p+1相当于加到a[1],(++p)->n == 5
发表于 2018-01-31 16:01:32 回复(0)
若p=a改为p=&a,则只选B
发表于 2017-07-01 14:22:26 回复(10)
(a+1)是一个地址,符合。(++a)或者(a++)不对,因为a是常数,不能自加
发表于 2018-09-11 10:54:21 回复(0)
括号()>成员选择-> >自增运算符++
于是,C选项,会p->n,然后指针+1
发表于 2017-07-05 19:49:46 回复(0)
p是一个结构体指针,选项c之所以不能访问的原因是因为后置++先取值,后++
发表于 2017-05-16 22:40:18 回复(2)
p中存放a的地址(相当于首元素地址)
A:++p相当于加到a[1],(++p)->n == 5
B:a为首元素地址,+1,相当于加到a[1],(a+1)->n == 5
C:p后++,这时p还是在a[0],p++->n ==3
D:p+1相当于加到a[1],(++p)->n == 5
发表于 2020-03-16 18:36:40 回复(0)
ABD
编辑于 2017-05-26 21:52:58 回复(0)
(a+1)->n  ==> (&a[0]+1)->n   ==> &a[1]->n
发表于 2021-09-17 19:33:23 回复(0)
数组名是常指针,B选项并没有改变a的值,所以是对的
编辑于 2020-05-29 21:47:59 回复(0)

没看到多选题,玛德

发表于 2019-10-28 01:25:20 回复(0)
我还以为是单选,看到第一个正确就不往下看了
发表于 2018-09-05 11:21:33 回复(0)
p是一个结构体指针
发表于 2018-02-12 18:28:40 回复(0)
题能出严谨点吗???
发表于 2017-07-18 12:37:42 回复(0)
AD
发表于 2017-07-08 10:03:50 回复(0)
A
发表于 2017-06-06 14:07:06 回复(0)
A
发表于 2017-05-24 00:26:50 回复(0)
b
发表于 2017-05-20 12:53:12 回复(0)