求教一个变参数形参函数,输出结果好像与预期不同。
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 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:51 编辑
用printf("%d\r\n", p);
test(9,(int)10,(int)11);
用printf("%d\r\n", p);
这样应该输出10 ayb_ice 发表于 2020-9-2 11:09
test(9,(int)10,(int)11);
用printf("%d\r\n", p);
您这个输出竟然是0 sonicll 发表于 2020-9-2 09:51
你可以试试这两种写法:
printf("%d\r\n",*(p+1));
printf("%d\r\n",*((char*)p+sizeof(int)));
您这两个全输出是0 ayb_ice 发表于 2020-9-2 10:17
用printf("%d\r\n", p);
输出为0 6688hyc 发表于 2020-9-2 12:16
输出为0
这是51模拟的结果 ayb_ice 发表于 2020-9-2 13:11
这是51模拟的结果
怎么是0x31呢? ayb_ice 发表于 2020-9-2 13:11
这是51模拟的结果
您这个是什么51单片机 还可以在线调试? 6688hyc 发表于 2020-9-2 14:14
怎么是0x31呢?
1的ASCII码就是0x31,
随便一个51都行,纯软件仿真的
页:
[1]