一道题讲清 小端模式和函数参数入栈

原创 2016年05月31日 07:41:05
#include <stdio.h>
int main(){
  long long a = 1, b = 2, c = 3; 
  printf("%d %d %d\n", a, b, c);  
 return 0;
}
//输出是102,而不是123

这里写图片描述

1 printf()是一个库函数,C,C++中函数的参数是从右往左入栈的;
2 栈的生长方向是从高往低的
3 小端模式是低位存储在低字节
4 %d格式输出的是4个字节大小,而long long为8个字节

printf函数的原型是printf(const char*,…);
第二个参数是任意个数目的参数,所以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.

相关文章推荐

C语言中函数参数为什么是由右往左入栈的?

先通过一个小程序来看一看:#include void foo(int x, int y, int z) { printf("x = %d at [%X]n", x, &x); printf("y = ...

c/c++函数参数的入栈顺序和计算顺序

先给出本文参考的链接: [C/C++函数参数读取顺序 ] [关于c语言和c++中的函数参数的执行顺序的问题],裘宗燕老师的讲解非常准确。尤其是对于表达式计算,表达式的副作用,都有启发性的讲解。 ...

函数参数入栈的方式__stdcall等

函数参数入栈的方式   __cdecl,__fastcall,   __stdcall   什么区别? -----------------------------------------------...

printf函数参数入栈

char p[10]; strcpy(p, "Pek"); printf("[%s]\n", p); printf("[%s] [%s]\n", p, strupr(p)); 其中strupr是转换大...

windows下函数参数入栈顺序和栈帧结构

栈帧布局 栈帧在函数调用时进行构建,以进行内存的隐式分配。内存可以显示的通过malloc(), calloc(), realloc(), new, free和delte在堆上进行申请和释放。不同的操作...

C语言函数参数入栈的汇编理解

先来看这样一段程序: #include #include #include void print1(int a,int b,int c) { printf("%p\n",&a); ...

C语言中函数参数的入栈顺序

C语言中函数参数的入栈顺序 分类: linux编程 2011-03-08 10:06 79人阅读 评论(0) 收藏 举报 对技术执着的人,比如说我,往往对一些问题,不仅想做...

C++函数参数的入栈顺序

长期以来大家都有一个疑问,C++函数参数的入栈顺序倒底是怎样的呢? 经验丰富的程序员一定会说C++参数的传输顺序是从右到左的, 这一点大家不妨可以自己建立一个控制台程序,看看函数入参的栈地址,你...

C语言中函数参数入栈的顺序

C语言中函数参数入栈的顺序 先通过一个小程序来看一看: #include void foo(int x, int y, int z) { printf("x = %d at [%X]n"...

C语言中函数参数的入栈顺序 .

对技术执着的人,比如说我,往往对一些问题,不仅想做到“知其然”,还想做到“知其所以然”。C语言可谓博大精深,即使我已经有多年的开发经验,可还是有许多问题不知其所以然。某天某地某人问我,C语言中函数参数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一道题讲清 小端模式和函数参数入栈
举报原因:
原因补充:

(最多只允许输入30个字)