C语言函数参数入栈顺序问题

wanyikang wanyikang 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <stdio.h>

void va_test(char *fmt, ...); //参数可变的函数声明

void main()
{
int a = 1, c = 55;
char b = 'b';
va_test("hello,world", a, b, c);
}

void va_test(char *fmt, ...)
{
//char buf[128];
char *p = NULL;
p = (char *) &fmt;
int i;
for (i = 0; i < 16; i++)
{
printf("%.4d ", *p);
p++;
}

}
可变参数的入栈顺序问题,一开始注释掉char buf[128];这条语句,用gdb(ubuntu 10.10下写的)调试结果为:
(gdb) p &fmt
$1 = (char **) 0xbffff320
(gdb) x/4xw 0xbffff320
0xbffff320: 0x08048510 0x00000001 0x00000062 0x00000037
可见确实是C调用约定,由于对齐,字符占4个字节。但当不注释掉char buf[128]时,用gdb调试结果为:
(gdb) p &fmt
$1 = (char **) 0xbffff27c
(gdb) x/4xw 0xbffff27c
0xbffff27c: 0x080485a0 0x00000000 0x00000000 0xbffff27c
后面参数不是传进来的 a, b, c.似乎不符合C调用约定。求原因?
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
wanyikang
C语言 70,040 成员 243,237 内容