当前位置: 首页 > news >正文

为啥每个语音的printf(“%d%d%d%d“,i,j,i++,j++)不一样

题目来源一位考研同学的题目。

第一眼:小子,这都不会😀
第二眼:wok,咋没有选项😢

        作为一个大一学C语音,大二学Java的同学来说,我一看就觉得肯定是11 6 11 6

        结果很遗憾,没有这个选项。

        我觉得不应该呀,于是我写了一段java代码跑了一次。


Java代码

        还好,我天天睡觉没有睡到连JAVA都不会的地步,但是我毕竟也是大一学过C语音的,我明明记得i++是后自增。

        那到底是怎么回事,还是实现一下好了,由于之前一直学的C++而且我记得两个应该差不多,就输出几个数字而且,能有多大区别。


C++语言代码

        我了个去,咋还是这样子,算了,还是老老实实写C吧。


C语音代码

        这次就不一样了,后来我才知道,printf里面还有顺序的说法,大致就是从左往右来执行。具体为啥,请恕我才疏学浅,如果有大佬知道的话可以在评论区给我解答一下吗,感激不尽。

#include <stdio.h>int main() {int i = 11, j = 6;printf("%d %d %d %d", i, j, i++, j++);// 1、 先运行了j++,此时由于是右自增,于是先显示了j的值,也就是6,然后j再自增了,此时j=7// 2、 第二个运行了i++,此时由于是右自增,于是先显示了i的值,也就是11,然后i再自增了,j=12// 3、 然后输出了j的值,也就是1第一步的7// 4、 最后输出了i的值,也就是12return 0;
}

        以上是我看了一些网上的资料给出的推测,所有我打算验证一下,看看是不是所谓的从右到左执行。

#include <stdio.h>int main() {int i = 11, j = 6;printf("%d %d %d %d %d %d", i, j, i++, j++, ++i, ++j );return 0;
}

        如果刚刚的推断是正确的,那么结果应该是:13 8 12 7 12 7。

        那么还是老样子,看看运行结果

        

        沃趣,咋回事,咋又不对,我看看AI咋说。

        到现在人更懵了,于是我试试更换GCC版本看看是否如同上面所说

        好吧,综上所述,当编译器为Clang时,出现了不一样的结果,这个结果比较好接受一些,从左往右算了一遍。

        后面又搜了一下,计算是从右往左,输出是从左往右

        总是觉得只能看出个大概,不能明白到底是怎么回事。

比如这个

  • i:最终值为 9(所有操作后的值)。
  • i++:在 i 增加到 9 之前为 8。
  • ++i:在 i 从 8 增加到 9 之后。
  • i++:在前面的操作之后为 6(操作后的值)。
  • ++i:最终值为 9(最后一次增加后的值)。

但是我总感觉这个解释并不好,不知道有没有大佬可以给我讲解一下呀!!!


http://www.mrgr.cn/news/2975.html

相关文章:

  • PyTorch升级之旅——安装与基本知识
  • css中怎样使calc计算的高度生效?
  • jmeter通过参数文件、循环组件实现多账号登陆
  • 接口测试的几种方法
  • 【CVE-2024-】泛微协同管理应用平台(e-cology)
  • Compose(13)聊聊compose的渲染特点
  • 刷到好听的音频怎么办
  • Javaweb学习之HTML(二)
  • 【IC前端虚拟项目】用例的完善与补充
  • 监控状态流图中的测试点
  • 三勾点餐系统|支持多端发布,方便二次开发
  • Python WebSocket自动化测试:构建高效接口测试框架
  • 232. 用栈实现队列
  • 协处理器+流水线 (9)
  • Linux系统性能调优指南-硬件资源管理
  • 从零到一,全面掌握Apache DolphinScheduler发版流程,实战派经验分享!
  • 前端算法 | LeetCode第 70 题爬楼梯问题
  • Java 开发中常用的 Linux 命令
  • java:实现简单的验证码功能
  • 如何设置PowerBI报告展示在屏幕的大小?