17_++和--操作符分析

关键词:++--操作符的本质、++--操作符使用分析、贪心法:++--表达式的阅读技巧

1.++--操作符的本质

  • ++--操作符对于两条汇编指令
  • 前置:先将变量自增(减)1,然后取变量值
  • 后置:先取变量值,然后将变量自增(减)1

2. ++--操作符使用分析

#include <stdio.h>

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

    return 0;
}

在vs下的输出结果:

i = 3, r = 0
i = 6, r = 18

在gcc下的输出结果:

i = 3, r = 0
i = 6, r = 16

总结:在vs编译器下和在gcc编译器下的输出结果不同,表达式r = (++i) + (++i) + (++i);在不同的编译器下运行方式不一样,在vs编译器下先执行三次++i然后再做加法运算;再gcc编译器下,先执行两次++i,然后做加法运算,然后再执行一次++i`,然后再做加法运行。

  • C语言中只规定了++--对应指令的相对执行次序
  • ++--对应的汇编指令不一定连续运行
  • 在混合运算中,++--的汇编指令可能被打断执行
  • ++--参与混合运算结果是不确定的

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

  • 编译器处理的每个符号应该尽可能多的包含字符
  • 编译器以从左向右的顺序一个一个尽可能多的读入字符
  • 当读入的字符不可能和已读入的字符组合成合法符号为止
  • 空格可以作为C语言中一个完整符号的休止符,编译器读入空格后立即对之前读入的符号进行处理

4. 小结

  • ++--操作符在混合运算中的行为可能不同
  • 编译器通过贪心法处理表达式中的子表达式
  • 空格可以作为C语言中一个完整符号的休止符
  • 编译器读入空格后立即对之前读入的符号进行处理

声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,681评论 8 114
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,187评论 2 33
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,698评论 0 13
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,381评论 0 27
  • 你有很多本书 却不曾认真读过几本 会唱很多歌曲 却不知写歌人是谁 有很多朋友 却少有人理会 你来自深夜的啜泣 谈了...
    桔树上阅读 1,365评论 0 0