谁能分析一下这个程序的问题?(C++)

xinyucap2000 2002-01-26 12:51:23
这是一个设计应用C++中函数参数个数不定的程序,代码如下:


#include <iostream>
#include <cstdarg>


// A function with a variable argument
// list.


void Presidents(int n, ...)
{
std::va_list ap;
va_start(ap, n);

while (n--)
{
char* nm = va_arg(ap, char*); // char* argument.
int year = va_arg(ap, int); // int argument.
std::cout << year << ' ' << nm << std::endl;
}

va_end(ap);
}


// The main() function.


int main()
{
Presidents(5, "Carter", 1976, "Reagan", 1980,
"Bush", 1988, "Clinton", 1992,
"??", 2000);
return 0;
}

它将输出:
1976 Carter
1980 Reagan
1988 Bush
1992 Clinton
2000 ??


问题是 如果在下面这两行
char* nm = va_arg(ap, char*); // char* argument.
int year = va_arg(ap, int); // int argument.

后面加
float salary = va_arg(ap,float);
并在下面的输出语句中加上输出salary的内容,
并在调用Presidents函数中分别配上5个float型数值。
但是,编译器直接显示的是Access violation,程序无法运行,这不是语法的问题。
因为如果将float换成int,double,char型数据都没有问题。
敬请赐教。
可以与下面的邮箱联系:xinyucap@163.com




...全文
21 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lak47 2002-01-26
  • 打赏
  • 举报
回复
sizeof(float) == 4
sizeof(double) == 8
在main函数中虽然加入的是5个float型数值,
但每个float压入栈时却是按double长度占8个字节
而float salary = va_arg(qp,float)还是按float的长度四个字节取,
当然就会出错

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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