学技术,绳锯木断,水滴石穿。首先非常感谢学员们,因为近期你们提出的一些笔试问题,给了笔者写这篇文章的灵感。笔者发现不少朋友在解答printf()函数和自增减运算符交互在一起的习题时,经常犯错,所以本次内容就是:printf()函数执行时对参数的计算顺序 以及 自增减运算符。本文中使用的编程开发工具是Visual Studio 2019。PS:代码表达程序员心中所想,而编译器相当于“翻译员”,将C语言代码转换为机器语言编码。即使代码相同,但若采用编译器不同,即“翻译员”不同,也可能会产生不同的运算结果。
Part 1来道典型例题热身直接上代码
最终显示的值是多少呢?
答案是:4 , 5
你答对了吗? (答错的朋友在看完下方的解析后,如果最终弄明白了,请点赞支持一下哈!)
Part 2例题分析例题涉及的核心知识有以下两点:① 调用printf()函数时,对于参数的计算顺序是从右向左的。故示例中需要先考虑i--,再考虑i++。② i++ 的运算原理是先使用i的值进行运算或格式替换操作,等待操作完毕后,再将变量i的值增加1(i--同理,不过最后的步骤时将变量i的值减少1)。++i的运算原理是先将变量i的值增加1,然后再使用i的值进行运算或格式替换操作。补充:记忆技巧,“谁前谁先”,若变量名先于++,比如i++,则“先用后加”;若++先于变量名,比如++i,则“先加后用”。
综上,例题中的printf("%d , %d\n",i++ , i--);分析步骤如下:1. 在执行此条语句前,i的值是5。2. printf()函数对于参数的处理顺序是从右向左,故i-- 将先于 i++ 处理。且i++将匹配"%d , %d\n"中的第一个%d,i--将匹配第二个%d。3. 处理i--时,将先用i的值替换第二个%d,这个数值是5,然后i的值减少1,变为4。4. 处理i++时,将先用i的值替换第一个%d,这个数值是4,然后i的值增加1,变为5。故最终显示结果为 5 , 4
Part 3测试一下掌握情况测试习题1: 请写出下列代码的输出结果。
测试习题2: 请写出下列代码的输出结果。
END
Part 1来道典型例题热身直接上代码
最终显示的值是多少呢?
答案是:4 , 5
你答对了吗? (答错的朋友在看完下方的解析后,如果最终弄明白了,请点赞支持一下哈!)
Part 2例题分析例题涉及的核心知识有以下两点:① 调用printf()函数时,对于参数的计算顺序是从右向左的。故示例中需要先考虑i--,再考虑i++。② i++ 的运算原理是先使用i的值进行运算或格式替换操作,等待操作完毕后,再将变量i的值增加1(i--同理,不过最后的步骤时将变量i的值减少1)。++i的运算原理是先将变量i的值增加1,然后再使用i的值进行运算或格式替换操作。补充:记忆技巧,“谁前谁先”,若变量名先于++,比如i++,则“先用后加”;若++先于变量名,比如++i,则“先加后用”。
综上,例题中的printf("%d , %d\n",i++ , i--);分析步骤如下:1. 在执行此条语句前,i的值是5。2. printf()函数对于参数的处理顺序是从右向左,故i-- 将先于 i++ 处理。且i++将匹配"%d , %d\n"中的第一个%d,i--将匹配第二个%d。3. 处理i--时,将先用i的值替换第二个%d,这个数值是5,然后i的值减少1,变为4。4. 处理i++时,将先用i的值替换第一个%d,这个数值是4,然后i的值增加1,变为5。故最终显示结果为 5 , 4
Part 3测试一下掌握情况测试习题1: 请写出下列代码的输出结果。
测试习题2: 请写出下列代码的输出结果。
END