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语言中一个完整符号的休止符
    • 编译器读入空格后立即对之前读入的符号进行处理
  • 相关阅读:
    边工作边刷题:70天一遍leetcode: day 52
    边工作边刷题:70天一遍leetcode: day 53-1
    边工作边刷题:70天一遍leetcode: day 53
    边工作边刷题:70天一遍leetcode: day 54
    边工作边刷题:70天一遍leetcode: day 55
    JavaScript 组件化开发之路(一)
    Promise
    HTML5 API 之 history
    时隔一年,window.scroll
    sublimeLinter-jshint 配置
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9152023.html
Copyright © 2011-2022 走看看