14 printf输出格式及栈空间分配
假设在一个32位的 little endian的机器上运行下面程序,输出结果:1 0 2
#include<stdio.h>
int main() {
long long a=,b=,c=;
printf("%d %d %d\n",a,b,c);
return ;
}
分析:
1 printf()是一个库函数,C,C++中函数的参数是从右往左入栈的;
2 栈的生长方向是从高往低的
3 小端模式是低位存储在低字节
4 %d格式输出的是4个字节大小,而long long为8个字节
所以,a=1,b=0,c=2
补充:栈是高地址到低地址增长,入栈就反过来了。
第二个参数是任意个数目的参数,所以printf函数不是分个把参数入栈,而是一股脑全部压入堆栈,因此对于8字节的数据来说,堆栈中的数据是1000 0000 2000 0000 3000 0000,%d按四字节输出,因此,第一个%d输出1,第二个%d输出0,第三个%d输出2。
如果改成printf("%d ", a);printf("%d ", b);printf("%d\n", c);那结果就是1,2,3.
little endian指低位字节排放在内存的低地址端(就是起始地址)
long占8个字节,假设其实地址是0,一个地址存一个字节,按照地位编址1,2会按照如下方式存储
地址 0 1 2 3 4 5 6 7 8 ...
内容 1 0 0 0 0 0 0 0 2 ...
%d只能按照四字节连续输出
那么第一个输出的便是0001=1 第二个输出0000=0 第三个输出0002
14 printf输出格式及栈空间分配的更多相关文章
- printf 输出格式
printf 输出格式C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型,其中方括号[]中的项为可选项.各项的意义介绍如下:1.类型类型字符用以表示输出数据的类型,其格式符 ...
- C语言的printf输出格式控制
C语言的printf输出格式控制 printf大家都耳熟能详,但是能真正将其用法弄透的估计很少见. 转一篇,改天整理. 1.转换说明符 %a(%A) 浮点数.十六进制数字和p-(P-)记数法( ...
- c语言printf()输出格式大全(转载)
1.转换说明符 %a(%A) 浮点数.十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整 ...
- C语言printf()输出格式大全
1.转换说明符 %a(%A) 浮点数.十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十 ...
- Printf()输出格式控制(转)
int printf(const char *format,[argument]); format 参数输出的格式,定义格式为: %[flags][width][.perc] [F|N|h|l]typ ...
- 汇编中call printf参数压栈时错误理解
EAX, ECX,EDX,EBX均可以32bit,16bit,8bit访问,如下所示: <-------------------EAX------------------------>|& ...
- printf输出格式总结
printf函数称为格式输出函数,其关键字最末一个字母f即为"格式"(format)之意.其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上. printf函数调用的一般形式 ...
- 从C中变化过来的各种语言的printf输出格式
在c.php和shell中经常可以碰到printf的使用,特别是在php中printf的相关变种有好几个:print.printf.sprintf.vprintf.vsprintf 在这些语言 ...
- printf输出格式
tips:#为空格 Printf 格式化字符串 格式代码 A ABC ABCDEFGH %S A ABC ABCDEFGH %5S ...
随机推荐
- BIOS、MBR、UEFI和GPT关系
很多用户在新买电脑,或是给已有电脑重装系统时都出现过怎么都无法引导U盘安装的情况.究其原因,还是没能搞清楚BIOS.MBR.UEFI和GPT的复杂关系.所以,今天小编就和大家分享一下它们之间的爱恨情仇 ...
- linux下sz rz的正确用法
一.背景 2018年5月30日,今天遇到一个关于串口协议相关的问题,其中涉及到串口传输工具sz,rz等的使用,从man手册中并没有获取到有效信息,因此经过一番搜索,才知这两个工具应该这样使用 二.使用 ...
- LOJ#2170. 「POI2011」木棍 Sticks
题目链接 题意就是给你一堆线段,然后线段有长度和颜色,让你选三条组成一个三角形,这三条线段颜色不能一样 题解: 做法:贪心 首先按照长度给这些线段排序一遍 然后贪心的去选,对于已经选出来同种颜色的,就 ...
- 机器学习 MLIA学习笔记(一)
监督学习(supervised learning):叫监督学习的原因是因为我们告诉了算法,我们想要预测什么.所谓监督,其实就是我们的意愿是否能直接作用于预测结果.典型代表:分类(classificat ...
- JMeter源码导入到Intellij IDEA
环境: Windows10,jdk1.8,Intellij IDEA 2018.1.5 x64,apache-jmeter-4.0_src.zip http://jmeter.apache.org/ ...
- MINA2.0用户手册中文版
MINA2.0用户手册中文版--第一章 MINA2.0入门 MINA2.0用户手册中文版--第二章 第一节 MINA应用程序架构 MINA2.0用户手册中文版--第二章 第二节 TCP服务端实例 MI ...
- eclipse安装adt插件后工具栏不显示android相关图标
到eclipse官网下载luna(开发android,推荐此版本,当前最新版4.4.2)版本的eclipse http://ftp.jaist.ac.jp/pub/eclipse/technology ...
- 用EL時(el-api.jar,el-ri.jar ),要設isELIgnored="false"
用EL時(el-api.jar,el-ri.jar ),要設isELIgnored="false" 否则jstl标签不显示. 加上 <%@page isELIgnored="false ...
- ArcGIS API for Silverlight 的重要内容******重要
ArcGIS Silverlight API:是构建在微软Silverlight平台之上,通过ArcGIS Server Rest API消费ArcGIS Server 服务,同时支持直接消费Bing ...
- 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(四)
七.Editing ArcGIS Server 10提供了: 通过feature service,在Web上编辑Feature layers的geographic data的功能. 通过geome ...