zoukankan      html  css  js  c++  java
  • ++与--操作符

    ++和--操作符的本质

    ++和--操作符对应两条汇编指令,前置时,表示变量自增(减)1,然后取变量值,后置表示变量先取变量值,然后变量自增(减)1

    一个有趣的问题

    int i = 0;
    (i++) + (i++)+(i++);
    (++i) + (++i) + (++i);

    上面两个表达式的值分别是多少?

    例子1:头疼的++

    #include<stdio.h>
    
    int main()
    {
        int i = 0;
        int r = 0;
        r = (i++) + (i++) + (i++);
    
        printf("i = %d,r = %d
    ",i,r);
        r = (++i) + (++i) + (++i);
        printf("i = %d,r = %d
    ",i,r);
        return 0;
    }
    
    

    在不同的编译器中,运行结果不同,在gcc中结果为3,3 ————————6,16

    面试中的奇葩题

    贪心法:++,--表达式的阅读技巧

    • 编译器处理的每个符号应该尽可能多的包含字符
    • 编译器从左到右的顺序一个一个尽可能多的读入字符
    • 当读入的字符不可能和已读入的字符组成合法字符未知

    例子2:贪心法阅读

    #include<stdio.h>
    
    int main()
    {
        int i = 0;
        // int j = ++i+++i+++i;
        int j = ++i+ ++i+ ++i;
        printf("i = %d
    ",i); // 3
        printf("j = %d
    ",j); // 7 不同编译器结果可能不同
       // printf("j = %d
    ",j);
        int a = 1;
        int b = 2;
        int c = a+++b;
        printf("c = %d
    ",c // 3
        return 0;
    }
    
    

    小结

    • ++与--操作符在混合运算中的行为可能不同
    • 编译器通过贪心算法处理表达式中的子表达式
    • 空格可以作为c语言中一个完整符号的休止符
    • 编译器读入空格后立即对之前读入的符号进行处理
  • 相关阅读:
    android-layout-finder 在线生成findViewById
    Android 广播机制
    Android Service随笔
    新博客地址(https://minxin.github.io)
    angr学习(四)
    angr学习(三)
    angr学习(二)
    angr学习(一)
    android studio NDK开发方案
    python虚拟机
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9152023.html
Copyright © 2011-2022 走看看