c复习--++ 与-- 操作

前置++  --

先变量自增(减)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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值