c复习--++ 与-- 操作
发布日期:2022-02-17 02:39:44 浏览次数:27 分类:技术文章

本文共 943 字,大约阅读时间需要 3 分钟。

前置++  --

先变量自增(减)1,取变量值;

后置++ --

取变量值,再变量自增(减)1;

问题

int i = 0;

(i++) + (i++) + (i++)

//猜测结果0+1+2 = 3

(++i) + (++i) + (++i)

//猜测结果4+5+6=15

这两个表达式值是多少?

    int i = 0;

    int r = 0;
    r = (i++) + (i++) + (i++);
    printf("i=%d\n", i);
    printf("r=%d\n", r);
    printf("\n");
    r = (++i) + (++i) + (++i);
    printf("i=%d\n", i);
    printf("r=%d\n", r);

vs2017结果为

和我们猜测的答案完全不一样。在gcc编译器的结果也是不一样的。

这其实是c语言的灰色地带。在不同的编译器里有不同的结果,因为不同编译器的汇编实现不一样,所以结果也不一样。因为在C语言中只规定了++ -- 的相对执行顺序,但汇编指令却不一定会连续执行,所以在混合运算中,++--的汇编指令会被打断。所以++--的混合运算结果是不确定的。所以所以不要写这样类似的代码。

贪心算法

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

编译器以从左向右的顺序一个一个尽可能的读取字符

当读入的字符不可能和以读入的字符组合成的合法字符为止。

实例说明

int main()

{   
    int i = 0;
    int j = ++i+++i+++i;//++i++ ==>1++ 错误    加入空格就解决了
    
    int a = 1;
    int b = 4;
    int c = a+++b;//a++ +b  ==>a=2
    
    int* p = &a;
    
    b = b/*p;//这里会成为注释。

    printf("i = %d\n", i);

    printf("j = %d\n", j);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
      
    return 0;
}

空格是C语言完整字符的休止符。读入空格后会立即对前面的字符进行处理。

所以要尽量使用空格。

学习交流群199546072

转载地址:https://blog.csdn.net/qq_39809601/article/details/81460394 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C语言复习三目运算符和逗号表达式
下一篇:C语言--宏定义与分析

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月31日 16时41分26秒