zoukankan      html  css  js  c++  java
  • C语言-第13课

    第13课 - ++,--操作符使用分析

     

    1. 示例

    #include<stdio.h>

    int main()

    {

    int k;

    int i = 3;

    k = (++i) + (++i) + (++i);

    printf("%d ",k);

    }

    我们看到这个程序,一般会以为,这个结果应该是15。但是编译器对这个处理和我们的想法是不一样的。

    一种编译器会显示18,这是因为,编译器会认为在做加法之前,进行了三次的加一运算,也就是每个结果都是6,三个6相加,结果是18

    第二种编译器,会认为这三个加法运算是平等的,先算前两个加,和上面的分析一样,变成了55,再加(++i),最后的结果是16

    gcc的结果是16g++的结果是16

    我们看到这样的程序,就要思考,我们究竟有没有必要这样写,当然没有。对于面试中,若是出现这样的题型,我们也可以说,不同的编译器有不同的思考。

     

    1. 逗号表达式

    #include<stdio.h>

    int main()

    {

    int x;

    int i = 3;

    x = (++i, i++, i+10);

    printf("%d ",x);

    }

    运行结果:15

    逗号表达式,是从左到右顺序求值,最后一个表达式的值,就是逗号表达式的值。

     

    1. 贪心法

    (1) 编译器处理的每个符号应该尽可能多的包含字符。

    (2) 编译器以从左向右的顺序一个一个尽可能多的读入字符。

    (3) 当即将读入的字符不可能和已读入的字符组成合法符号为止。

    #include <stdio.h>

    int main()

    {   

        int i = 0;

    //  int j = ++i+++i+++i;

    //  编译器在读到++i++的时候就已经出错了,++i的值是2,2++就会出错。

        int a = 1;

        int b = 2;

        int c = a+++b; //c = a++ +b;

    printf("%d,%d ",c,a);  //c=3, a=2

        int* p = &a;

    //  b = b/*p;

    //  贪心法会认为/*是一个注释符,改成b = b/ *p;

        return 0;

    }

     

     

     

  • 相关阅读:
    激光雷达的数学模型
    TX2刷机踩坑
    rplidar S1测试
    cartographer 调参(2)-ROS API 文档
    ROS 包制作
    Python 文件操作
    V-REP远程控制--Python版
    V-REP 喷涂仿真
    Jeston TX2 备份
    Anaconda jupyter-notebook 添加kernel
  • 原文地址:https://www.cnblogs.com/free-1122/p/9706883.html
Copyright © 2011-2022 走看看