打印
[C语言]

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

[复制链接]
603|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

使用特权

评论回复
5
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   

使用特权

评论回复
6
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

使用特权

评论回复
7
6688hyc|  楼主 | 2020-9-2 12:16 | 只看该作者
ayb_ice 发表于 2020-9-2 10:17
用printf("%d\r\n", p[1]);

输出为0

使用特权

评论回复
8
ayb_ice| | 2020-9-2 13:11 | 只看该作者

这是51模拟的结果

QQ图片20200902131055.png (43.21 KB )

QQ图片20200902131055.png

使用特权

评论回复
9
6688hyc|  楼主 | 2020-9-2 14:14 | 只看该作者
ayb_ice 发表于 2020-9-2 13:11
这是51模拟的结果

怎么是0x31呢?

使用特权

评论回复
10
6688hyc|  楼主 | 2020-9-2 14:15 | 只看该作者
ayb_ice 发表于 2020-9-2 13:11
这是51模拟的结果

您这个是什么51单片机 还可以在线调试?

使用特权

评论回复
11
ayb_ice| | 2020-9-2 14:32 | 只看该作者

1的ASCII码就是0x31,

随便一个51都行,纯软件仿真的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

278

主题

1323

帖子

16

粉丝