首页 > 其他分享 >printf(“%d %d %d %d\n“,--i,i--,++i,i++);

printf(“%d %d %d %d\n“,--i,i--,++i,i++);

时间:2024-10-31 17:45:26浏览次数:3  
标签:真值 -- ++ int 缓存 printf

#include<stdio.h>
int main()
{
	int i = 0;
    printf("%d %d %d %d\n",--i,i--,++i,i++);
}

第一次接触到这个问题,相信大家跟我一样,信心满满,心里想着“这不就是考,先++就先+再调用,后++就先调用再+”,于是把这一题秒了。

--i,先减再调用,答案-1,i变为-1

i--,先调用再减,答案-1,i变为-2

++i,先加再调用,答案-1,i变为-1

i++,先调用再加,答案-1,i变为0

所以最终答案为:-1 -1 -1 -1 

但实际上答案是:0 2 0 0

其实,printf输出时表达式值的计算顺序是从右到左,例如:

#include <stdio.h>
int main()
{
    int a=5;
    printf("%d %d %d",a,a+2,a=1);
    return 0;
}

答案不是我最开始认知的5 7 1,而是1 3 1

正是因为printf输出时表达式值的计算顺序是从右到左,先计算a=1,改变了a的值,a+2和a并没有改变a的值,不用计算。最后打印的时候再从左往右,即1 3 1。

有了从右往左的思想后,我们引入栈这个内容,简单来讲就是一个死胡同,先进去的最后才能出来,最后进去的最先出来,在这里就是最后面的最先进入栈,最后打印。

我们回过头来看这题

#include<stdio.h>
int main()
{
	int i = 0;
    printf("%d %d %d %d\n",--i,i--,++i,i++);
}

1、从右向左计算
2、先计算后打印 
3、++/--前置的打印真值
4、++/--后置的打印缓存值 
5、此题,从后往前看,i++存储i的缓存值为0,i加1变为1 
6、++i不改变缓存值,i真值加1变为2
7、i--存储i的缓存值为2,i真值减1变为1
8、--i不改变缓存值,i真值减1变为0

故最终答案为 0 2 0 0

画出我们理解的栈即为:

i=0缓存值真值打印
栈顶--i不改变0真值
i--212
++i不改变2真值
栈底i++010

真值=0

最终打印:真值 当前缓存值 真值 当前缓存值,即0 2 0 0

来个题目巩固一下

#include<stdio.h>
int main()
{
	int i = 3;
    printf("%d %d %d %d %d %d %d %d %d %d\n",--i,i--,++i,--i,i--,++i,--i,i--,++i,i++); 
	return 0;
}

我们直接上表格秒了他

i=3缓存值真值打印
栈顶--i不改变1真值
i--323
++i不改变3真值
--i不改变2真值
i--434
++i不改变4真值
--i不改变3真值
i--545
++i不改变5真值
栈底i++343

真值=1

答案 1 3 1 1 4 1 1 5 1 3

标签:真值,--,++,int,缓存,printf
From: https://blog.csdn.net/m0_56934903/article/details/143331256

相关文章

  • 1D+洪水淹没制图软件(洼地处理、流向计算、集水面积计算、河网定义、最近邻河道相对高
    1. 软件原理简介基于洪水频率计算得到的设计洪水成果,通过水位流量关系将常见年遇洪水的洪峰流量转化为水位,进一步结合洪泛平原DEM数据,采用GIS水文分析方法计算洪泛平原内任一栅格的水流流程,耦合一维水力学模拟计算,用于大范围洪水淹没制图。淹没制图算法近似于HecRAS等水力学......
  • AUMO 傲目亮相 2024 汽车工程技术与装备展,多款自动驾驶硬件在环仿真测试产品引关注
     10月29日至31日,由工业和信息化部装备工业发展中心、中国检验认证集团和长三角国家技术创新中心主办的“2024汽车工程技术与装备展”在苏州高新区狮山会议中心成功举办。 本次展会以“新智驱动、新质发展”为主题,设立了多场主题分论坛和特色活动,汇聚了来自全国各地的行业领......
  • ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算(地质监测、城市规划、农业
    在科技飞速发展的时代,遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究,空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。原文链接:ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算(地质监测、城市规划、......
  • 重温c语言之,7天开整,就是随便的写写,第一天
    一:转义字符\t是一个字符,在printf里面,只占一个位置;其他什么的抽象字符,用一个'\'+抽象字符就可以出现;\ddd这个是8进制的,可以转成10进制的,之后参考ASCLL码表即可二:枚举类型的函数与数组一样,有下标,都是从0开始的三:数组可以先不在【】这里面填写多少,但是需......
  • 个微自动回复:让你轻松搞定大量消息无压力!
    对于很多销售客服来说,每天要面对成千上万的客户消息,有时难免会感觉到手忙脚乱。因此,微信自动回复就成为了很多人的需求和选择,它能帮助我们轻松应对大量消息。1、自动通过好友请求系统会根据你设定的规则自动处理所有好友请求。这样一来,你就可以告别一一手动通过,省下大量的时......
  • docker为什么适合devops
    在当今快速发展的软件开发周期中,Docker的出现无疑符合了DevOps的核心需求:高效性、一致性、可复制性、以及便捷性。它让开发和运维团队能够更快速地交付和更新软件应用。特别是Docker的容器技术,使得应用可以在分离的环境中运行,而不受宿主机环境的影响,同时保持轻量和快速。这种机制......
  • C++三五法则
     若类中有资源在构造函数中创建,并在析构函数中释放,此时需要显式定义拷贝构造、赋值,析构等操作,若在程序没有显示声明并定义时,会被隐式生成,对于不包含联合体的类,隐式生成的拷贝构造函数和赋值运算在执行时,会按成员对象依次复制,隐式生成的析构函数为空如下面的类T管理资源int*clas......
  • CATIA许可证常见问题解答
    在使用CATIA软件的过程中,许可证问题常常是用户关心的焦点。为了帮助大家更好地理解和解决这些问题,我们整理了一份CATIA许可证常见问题解答,希望能为您提供便捷的参考。问题一:如何激活CATIA许可证?解答:激活CATIA许可证通常需要访问软件的官方平台或使用特定的许可证管理工具。您需......
  • 决策单调性优化 DP
    前言本文将介绍决策单调性优化DP的相关内容。持续更新修正,如有差错请指出。1.四边形不等式优化1.1四边形不等式与决策单调性四边形不等式:如果对于任意的\(a\leb\lec\led\)均成立\[w(a,d)+w(b,c)\gew(a,c)+w(b,d)\]则称代价函数\(w\)满足四边形不等式。......
  • 大学 C 语言在线 PTA 平台编译提示警告未使用 scanf 返回值的问题
    最近在知乎发现有不少大学生在使用PTA平台在线编写C语言代码,编译时提示警告未使用scanf返回值的问题。具体现象是编译器输出显示为类似于这样的提示。a.c:Infunction‘main’:a.c:9:5:warning:ignoringreturnvalueof‘scanf’declaredwithattribute‘warn_u......