一个关于不定参的问题

lyyscf 2009-04-02 11:05:36
一个关于不定参的问题
#include <iostream.h>
void Format(int a,...)
{
char *p=(char*)&a;
int n=*((int *)p);
cout<<n<<endl;
//
p+=sizeof(a);
char *s=*((char**)p);
cout<<s<<endl;
//
p+=sizeof(s);
double d=*((double*)p);
cout<<d<<endl;
//
p+=sizeof(d);
float f=*((float*)p);
cout<<f<<endl;
}
void main()
{
int n=12;
char *s="123456";
double d=12.123;
float f=12.123;
Format(n,s,d,f);
}
结果如下:
12
123456
12.123
-3.68935e+019
Press any key to continue
为什么float型的值获取不正确,float与别的类型是不是有什么不同,哪个能回答一个?
...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
M_S_D_N 2009-04-02
  • 打赏
  • 举报
回复
在stdarg.h文件中有这段注释,但是,为什么要这么做呢?
/* +++++++++++++++++++++++++++++++++++++++++++
Because of parameter passing conventions in C:
use mode=int for char, and short types
use mode=double for float types
use a pointer for array types
+++++++++++++++++++++++++++++++++++++++++++ */
lgccaa 2009-04-02
  • 打赏
  • 举报
回复

http://hi.baidu.com/mgqw/blog/item/9b7a52a2ffbbecabcaefd040.html

在可变长参数中,应用的是"加宽"原则。也就是float类型被扩展成double;char, short被扩展成int
ydntlk 2009-04-02
  • 打赏
  • 举报
回复
改成double就好了。
参数好像不能是char,short和float的。
douyangyang 2009-04-02
  • 打赏
  • 举报
回复
和我遇到的情况一模一样,可以参考这里
http://topic.csdn.net/u/20090401/00/9ff2e4d5-aaf7-49dd-8a04-b53a12f17787.html
lyyscf 2009-04-02
  • 打赏
  • 举报
回复
问题解决,明天结贴加分...

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧