C语言中变长参数类型

1. 函数原型定义

变长参数是C语言的特殊参数形式, 例如如下函数声明:

int printf(const char* format, ...);

void myFunc(int arg1, float arg2, int arg, ...);


2. 变长参数的使用

在变长参数函数的实现部分,可以使用stdarg.h头文件里面的多个宏来访问各个额外的参数,假设lastarg是变长参数函数的最后一个具名参数(例如printf里的format,myFunc里的arg)。

(1)首先定义类型为va_list的变量,如:

va_list ap;
该变量以后将会依次指向各个额外的变量参数。


(2)其次ap必须用宏va_start初始化

va_start(ap);                 //初始化指针
此时ap指向额外参数的第一个参数。


(3)使用宏va_arg取得当前ap指向的参数的值,并使ap指向下一个参数

int next = va_arg(ap);        //假设此时的参数类型为int型


(4) 最后使用宏va_end将指针ap置零

va_end(ap);                   //指针清零

例子,如下代码:

/* VariableArgs.c */
#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, i;
    va_list ap;
    va_start(ap, count);

    for (i = 0;i < count;i++) 
    {
        printf("%d: ap = %p, *ap = %d, ",i, ap, *ap);
        next = va_arg(ap, int);
        printf("next = %d\n", next);
    }
    printf("end: ap = %p\n", ap);
    va_end(ap);
} 

输出:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值