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);

ayb_ice 发表于 2020-9-2 11:09

test(9,(int)10,(int)11);
用printf("%d\r\n", p);

这样应该输出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);



您这个输出竟然是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);

输出为0

ayb_ice 发表于 2020-9-2 13:11

6688hyc 发表于 2020-9-2 12:16
输出为0

这是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

6688hyc 发表于 2020-9-2 14:14
怎么是0x31呢?

1的ASCII码就是0x31,

随便一个51都行,纯软件仿真的
页: [1]
查看完整版本: 求教一个变参数形参函数,输出结果好像与预期不同。