首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言变长参数怎么弄

2013-09-05 
C语言变长参数如何弄啊本帖最后由 u011609612 于 2013-08-24 12:22:06 编辑#include iostream#include

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 变量的。

热点排行