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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年03月31日 16时41分26秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JavaScript 操作 HTML DOM
2019-04-26
实训中学到的HTML基础知识(1)
2019-04-26
实训中学到的HTML基础知识(2)
2019-04-26
实训中学到的HTML基础知识(3)
2019-04-26
实训中学到的HTML基础知识(4)
2019-04-26
实训中学到的HTML基础知识(5)
2019-04-26
实训中学到的HTML基础知识(6)
2019-04-26
JAVA SE之面向对象10:集合1
2019-04-26
排序算法整理2:选择排序及其时间与空间复杂度的计算
2019-04-26
JAVA SE之面向对象14:IO流的基础
2019-04-26
Handler+Looper+MessageQueue+Message机制分析
2019-04-26
Android窗口机制
2019-04-26
Java并发编程之线程、多线程和线程池专题
2019-04-26
购买了新域名后怎么办?域名有哪些方向?
2019-04-26
哪类数字域名更优秀?数字域名价值高吗?
2019-04-26
入手域名贵吗?域名注册价格和续费价格是多少钱?
2019-04-26
卡特兰数(Catalan Numbers) 题单
2019-04-26
Android中获取视频的缩略图
2019-04-26
Android之Notification详解
2019-04-26