[C语言] 求教一个变参数形参函数,输出结果好像与预期不同。

[复制链接]
782|10
 楼主| 6688hyc 发表于 2020-9-1 17:53 | 显示全部楼层 |阅读模式
int test(int num,...)
{
int *p=#
printf("%d\r\n",*(p+sizeof(int)));
}
int main(int argc, char** argv)
{

test(9,10,11);
return 0;
}
-----------------------------
输出结果是11。(windows平台下Dev C++)
-----------------------------
结果不应该是10吗?

sonicll 发表于 2020-9-2 09:51 | 显示全部楼层
本帖最后由 sonicll 于 2020-9-2 10:12 编辑

你可以试试这两种写法:
printf("%d\r\n",*(p+1));
printf("%d\r\n",*((char*)p+sizeof(int)));
输出的是多少

p是int型的指针,假设你的编译环境int型是2字节,那p增加1,实际的地址应该增加了2才对,你原来的写法,p实际增加了2x2


ayb_ice 发表于 2020-9-2 10:17 | 显示全部楼层
本帖最后由 ayb_ice 于 2020-9-2 10:51 编辑


用printf("%d\r\n", p[1]);
ayb_ice 发表于 2020-9-2 11:09 | 显示全部楼层
test(9,(int)10,(int)11);
用printf("%d\r\n", p[1]);

这样应该输出10
 楼主| 6688hyc 发表于 2020-9-2 12:14 | 显示全部楼层
ayb_ice 发表于 2020-9-2 11:09
test(9,(int)10,(int)11);
用printf("%d\r\n", p[1]);

您这个输出竟然是0   
 楼主| 6688hyc 发表于 2020-9-2 12:16 | 显示全部楼层
sonicll 发表于 2020-9-2 09:51
你可以试试这两种写法:
printf("%d\r\n",*(p+1));
printf("%d\r\n",*((char*)p+sizeof(int)));

您这两个全输出是0
 楼主| 6688hyc 发表于 2020-9-2 12:16 | 显示全部楼层
ayb_ice 发表于 2020-9-2 10:17
用printf("%d\r\n", p[1]);

输出为0
ayb_ice 发表于 2020-9-2 13:11 | 显示全部楼层

这是51模拟的结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 6688hyc 发表于 2020-9-2 14:14 | 显示全部楼层
ayb_ice 发表于 2020-9-2 13:11
这是51模拟的结果

怎么是0x31呢?
 楼主| 6688hyc 发表于 2020-9-2 14:15 | 显示全部楼层
ayb_ice 发表于 2020-9-2 13:11
这是51模拟的结果

您这个是什么51单片机 还可以在线调试?
ayb_ice 发表于 2020-9-2 14:32 | 显示全部楼层

1的ASCII码就是0x31,

随便一个51都行,纯软件仿真的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

278

主题

1323

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部