[C/C++]如何定义并提取"..."的值

问题描述:

[C/C++]如何定义并提取"..."的值
int intaveragevalue(int a,...)//average value
{
\x05int ret = a;
\x05return ret;
}
搞了半天都没有把"..."给提取出来.
P.S."..."应是int类型,可编译时却成了void.
P.P.S.有木有一个获取"..."被赋值次数的方法?
1个回答 分类:综合 2014-11-07

问题解答:

我来补答
使用stdarg.h文件以及提供的相应的宏
#include <iostream>
#include <stdarg.h>
int intAverageValue(int a, ...);

int main()
{
\x05std::cout << intAverageValue(4, 1, 2, 3, 4);
}

int intAverageValue(int a, ...) //a是后面参数的个数
{
\x05va_list ap;    //定义一个指向个数可变的参数列表指针ap;
\x05va_start(ap, a);  //使参数列表指针ap指向函数参数列表中的第一个可选参数

\x05int ret = 0;
\x05while (a-- != 0)
\x05\x05ret += va_arg(ap, int);//返回参数列表中指针ap所指的参数,返回类型为int,并使指针ap指向参数列表中下一个参数.

\x05va_end(ap); //清空参数列表,并置参数指针ap无效

\x05return ret;
}
应该没有,必须指定参数的个数
再问:
再答: 不好意思,刚刚才看到。

首先,整形数与浮点数的储存方式不同,因此在调用的时候,要使用浮点形式,1要写成1.0f。
另外,不能直接使用float型,函数在传递参数时自动将float型提升为double型。因此在使用va_arg时t应为double,如有需要再强制转换为float。不知道这是标准要求的还是机器相关的。

测试代码:#include <iostream>
#include <stdarg.h>

float AverageValue(int a, ...);

int main()
{
\x09// std::cout << intAverageValue(4, 1, 2, 3, 4) << std::endl;

//\x09std:: cout << AverageValue(5, (float)1, (float)2, (float)3, (float)4, (float)5);
\x09std::cout << AverageValue(5, 1.f, 2., 3., 4., 5.);

}

float AverageValue(int a, ...)
{
\x09int* p = &a;

\x09va_list ap;
\x09va_start(ap, a);
\x09float ret = 0;
\x09int b = a;
\x09while (b-- != 0)
\x09\x09ret += (float)va_arg(ap, double);
\x09va_end(ap);
\x09ret /= (float)a;
\x09return ret;
}结果:

 
 
展开全文阅读
剩余:2000
下一页:填词谢谢