关闭

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

标签: 函数
218人阅读 评论(0) 收藏 举报
分类:
#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.

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:210083次
    • 积分:4008
    • 等级:
    • 排名:第8107名
    • 原创:188篇
    • 转载:33篇
    • 译文:0篇
    • 评论:14条
    最新评论