printf函数输出多个printf 、前置加加或者后置加加
目录
(1)前置加加和后置加加的区别
(2)printf输出前置加加
(3)printf输出后置加加
(4)printf输出printf
(1)前置加加和后置加加的区别
首先我们先来了解一下前置加加和后置加加的区别。
前置加加在编译器里的操作
//++a
int a = 0;
a = a + 1;
return a;
前置加加是先加一,后赋值,返回的值是加一之后的值。
后置加加在编译器里的操作
//a++int a = 0;
tmp = a;
a = a + 1;
return tmp;
后置加加是先把值赋给临时量,然后再加一,返回的值是临时量的值。
前置加加可以做左值,因为前置加加返回的是a的值,是可以进行操作的,后置加加则不可以,因为后置加加返回的是一个临时量,并不是程序中定义的可寻址变量,不能通过地址对temp进行操作。
(2)printf输出前置加加
#include<stdio.h>int main()
{int i = 1;printf("%d,%d\n",++i,++i);return 0;
}
printf函数计算参数的时候是从右往左压栈的。目的是为了计算参数的个数。编译器首先从右往左计算各参数的值,再进行压栈操作,最右端的"++i"的值是计算出来是2,保存在eax寄存器中,接着计算倒数第二个"++i"的值,给eax寄存器加一,保存为3,然后进行压栈,把eax寄存器里的i的地址放入栈中,此时输出的值是i的值,所以都是3.
(3)printf输出后置加加
#include<stdio.h>int main()
{int i = 1;printf("%d,%d\n",i++,i++);return 0;
}
最右端的"i++"的值为1,保存在临时量里,计算出i的值为2,倒数第二个"i++"的值为2,i的值为3,"i++"也保存在对应的临时量里,但是两个临时量保存的地址是不同的,进行压栈操作,压入的是保存两个临时量的地址,所以输出的是2和1.
汇编指令:
(4)printf输出printf
#include<stdio.h>int main()
{int i = 33;printf("%d\n",printf("%d ",printf("%d ",i)));return 0;
}
首先输出的第一个"33"是"i"的值,第二个"%d"算出来的是"33"的值的字节大小,占两个字节,还有空格的字节长度,一共是三个字节,所以输出的是"3",第三个"%d"算出来的是"3"的值的字节大小,占一个字节,还有空格的字节长度,一共是两个字节,所以输出的是2。
printf函数输出多个printf 、前置加加或者后置加加相关推荐
- 关于C语言中printf函数“输出歧视”的问题
目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...
- c程序设计语言中printf,编程序 用getchar函数读入两个字符c1和c2,然后分别用putchar和printf函数输出这两个字符。请问...
编程序,用getchar函数读入两个字符给c1和c2,然后分别用putchar和printf函数输出这两个字符.请问: 1. 变量C1,C2应定义为字符型或整型?或二者皆可? 答:在这个题目里,变量C ...
- C语言学习之编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符
编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符.思考以下问题: (1)变量cl和c2应定义为字符型,整型还是二者皆可? (2)要求输 ...
- 使用printf函数输出
多行文本输出 整段输出 多行文本输出 在上节的教程中,我们使用printf()函数输出了Hello, World! 以向这个世界问好.你可能留意到了文中提到的\n,它用于产生一个新行,这样再次输出文本 ...
- c语言之printf函数输出字符数据
//用printf函数输出字符数据 #include <stdio.h> int main() {//定义两个变量char c = 'a';int i = 97;//输出变量%c以字符形式 ...
- C++之前置自增与后置自增
关于前置自增与后置自增的区别我是参考这里:http://bbs.bccn.net/thread-454977-1-1.html 简单复述下,比如++x; 与 x++; 在C中,++x这个表达式的值为原 ...
- 单元测试|Unittest setup前置初始化和teardown后置操作
Unittest setup前置初始化和teardown后置操作 针对类中每个函数执行时进行前置后置的操作 setUp(self):测试前的初始化操作 tearDown(self):测试后的操作 代码 ...
- 【程序设计】前置检测循环和后置检测循环
前置检测循环的结构: while () {// ... } 后置检测循环的结构: do {// ... } while () 前置检测循环和后置检测循环的区别: 从定义上看,前置检测循环在程序开头有测 ...
- 什么是前置审批许可、后置审批许可?
注册公司办理营业执照时要填写公司经营范围,公司经营范围通常分为"一般经营项目"和"许可经营项目".一般经营项目是企业不需要提供特种行业经营许可的经营项目:许可经 ...
最新文章
- 操作系统安全加固原理
- android+3e错误,Android 错误
- ibmmq 通道命令_IBM MQ 从接收通道获取数据
- python正确的赋值语句-Python 赋值语句技巧之序列解包
- 设计模式-观察者模式 实现
- 数据库行转列的sql语句(zt)
- leetcode306. 累加数(回溯)
- Java基础学习总结(121)——Java JVM执行流程
- VMware 未能初始化监视器
- mupdf添加图片水印_在博客园里给图片加水印(canvas + drag)
- 实战篇---Nios ii 基本操作
- HOUR 11 Developing Advanced Pointers
- Autonomous Driving in Adverse Weather Conditions: A Survey - 恶劣天气条件下的自动驾驶:一项调查 (arXiv 2021)
- 一加11:新的赛场,“不温和”的答卷
- 【开发技能】研发线上事故总结!
- 用java代码输出乘法口诀表
- 高级电工实验室装置QY-DG758A
- java影射射射...
- 1024 - 在这里起航!
- 什么是sqfs文件格式
热门文章
- 解密 云HBase时序引擎OpenTSDB 优化技术
- 【公测中】阿里云发布国内首个大数据双活容灾服务,满足高要求大数据灾备场景
- 用深度学习解决Bongard问题
- 追踪 Kubernetes 中的网络流量
- 程序员!别逼自己买课了,每天花10分钟做这件事,写代码能力暴增......
- 刷爆了!李彦宏:这类程序员我给100万!你怎么看?
- Spark精华问答:DataFrame与RDD的主要区别在哪?
- 细说说傲腾与哈娜的那些事儿
- python document_python处理document文档保留原样式
- php同时删除两个列表数据库,PHP 处理 数据库多表,既能高效又能思路清晰如何处理的?...