• 20180529-2


    下列程序的运行结果是3,5,请为横线处选择合适的程序( )
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include<stdio.h>
     struct S
     {
        int n;
        char c[10];
     } *p;
     main()
     {
        struct S a[3]={{3,"abc"},{5,"def"},{7,"ghi"}};
        p=a;
        printf("%d,",(*p).n);
        printf("%d ",___________);
     }
    (++p)->n
    (a+1)->n
    p++->n
    (p+1)->n

    答案ABD 错选B
    多选  - -。
    A 选项如果把括号去掉,运算结果就会变成4.因为成员选择符->优先级比前置++、后置++都要高。
    C 选项p++->n中加括号"(p++)->n"或者不加括号,运算结果都是3。
    《C专家编程》中讲过,++a是取a的地址,增加它的值,再写入寄存器中,而a++是取a的地址,将它的值装入寄存器,再增加它的值。因此可以解释为什么C选项加不加括号结果都一样。
     
    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
     
  • 相关阅读:
    STM32的DMA
    STM32 入门之 GPIO (zhuan)
    CRC校验码 代码
    actan函数 查表法
    UART 和 USART 的区别
    STM32的NVIC理解
    STM32_adc
    STM 32 can 实例代码
    在Visual C#中调用API的基本过程
    贴片电阻阻值标识
  • 原文地址:https://www.cnblogs.com/kxzh/p/9126440.html
Copyright © 2020-2023  润新知