一道题讲清 小端模式和函数参数入栈
#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.

阅读更多
文章标签: 函数
个人分类: 小题目整理
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭