zoukankan      html  css  js  c++  java
  • 7.11牛客题(赋值+运算符优先级)

    对以下程序,正确的输出结果是(D) <stdio.h>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    #define SUB(x,y) x-y
    #define ACCESS_BEFORE(element,offset,value) *SUB(&element, offset) = value
    int main() {
        int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        int i;
        ACCESS_BEFORE(array[5], 4, 6);
        printf("array: ");
        for (i = 0; i < 10; ++i) {
            printf("%d", array[i]);
        }
        printf(" ");
        return (0);
    }
    </stdio.h>
    A array: 1 6 3 4 5 6 7 8 9 10
    B array: 6 2 3 4 5 6 7 8 9 10
    C 程序可以正确编译连接,但是运行时会崩溃
    D 程序语法错误,编译不成功


    分析:
    本题主要是考察宏定义的替换,宏替换在预编译阶段进行,不进行语法的检查,当进行替换时,ACCESS_BEFORE(array[5],4,6)被替换成*(&array[5])-4=6 显然这是不正确的,
    在赋值表达式中,左值必须是一个可修改的内存块,而上述式子的左值是一个字面值常量,这是编译不能通过的。
    运算符优先级参考博客:https://blog.csdn.net/yesyes120/article/details/79514516


  • 相关阅读:
    Mysql索引优化分析
    mysql学习
    linux安装mysql
    MVC实例应用模式
    模型-视图-控制器MVC模式
    设计模式理解
    XX系统质量属性战术
    XX系统可用性易用性
    属性常见属性场景
    架构漫谈读后感
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/11169302.html
Copyright © 2011-2022 走看看