C语言变长参数如何弄啊
本帖最后由 u011609612 于 2013-08-24 12:22:06 编辑 #include <iostream>
#include <stdio.h>
#include <stdarg.h>
void func(unsigned count, ...);
int main(void)
{
func(3, 1, 2, 3);
return 0;
}
void func(unsigned count, ...)
{
int next;
va_list ap;
va_start(ap, count); // 其次ap必须用宏va_start初始化
for(int i = 0; i < count; i++)
{
//printf("%d: ap = %p, *ap = %d, ",i, ap, *ap);
next = va_arg(ap,int); // 使用宏va_arg取得当前ap指向的参数的值,并使ap指向下一个参数
printf("next = %d\n", next);
}
//printf("end: ap = %p\n", ap);
va_end(ap); // 最后使用宏va_end将指针ap置零
}
我这边有个示例,不过有两个问题我不明白,这个例子中,第一个参数需要传入不定长参数的个数count,如果我不想传可以吗?谁帮我改一下代码
此例是典型的func(int i,...),如果是func(...)这种形式呢?
[解决办法]
可以,但是你要保证能从这个参数中获取参数个数,就像printf可以根据字符串中的格式码来确定后面的参数个数,因为那个va_start函数需要参数个数的来初始化va_list 变量的。