C语言可变参数的简单理解-计算最大值

可变参数是C里面的一个使用技巧,用宏来实现的,其实主要是根据一个可变参数指针,然后不断的往后移指针。

但是理解是怎么用的,还是比较容易的。

#include <stdarg.h>//使用可变参数需要的头文件
#include <stdio.h>

int max(int count, ...){
        va_list ap;//1)定义一个可变参数,这个地方其实是一个指针,用于访问可变参数中的参数列表
        va_start(ap,count);//2)初始化可变参数,并把刚定义的指针指向第一个参数。
        int maximum = -1;//假设这都是正整数求最大值,如果不是,就可以把maximum设为最大的负数
        int temp,i;
        for(i = 0; i < count; i++) {
                temp = va_arg(ap, int);//从可变参数列表指针的当前位置获取一个int型参数,并把指针指向下一个参数。
                if(maximum < temp)
                        maximum = temp;
        }
        va_end(ap);//结束
        return maximum;
}

int main(int argc,char **argv){
        int ret_max = max(9,1,6,21,32,5,68,15,32,62);
        printf("max in (9,1,6,21,32,5,68,15,32,62) is %d",ret_max);
        return 0;
}


基本上使用可变参数,都是这几步曲:

  1. 在调用参数表之前,定义一个 va_list 类型的变量。va_list ap ;
  2. 对 ap 进行初始化,让它指向可变参数表里面的第一个参数,这是通过 va_start 来实现的,第一个参数是 ap 本身,第二个参数是在变参表前面紧挨着的一个变量;这时候,可以直接把ap作为参数给printf等函数来用的。如:printf(msg,ap);
  3. 如果需要自己获取参数的话,可以调用va_arg,对很多打印的业务来说,这一步不是必须的。调用 va_arg,它的第一个参数是 ap,第二个参数是要获取的参数的指定类型,然后返回这个指定类型的值,并且把 ap 的位置指向变参表的下一个变量位置;
  4. 获取所有的参数之后,我们有必要将这个 ap 指针关掉,以免发生危险,方法是调用 va_end,他是输入的参数 ap 置为 NULL,应该养成获取完参数表之后关闭指针的习惯,这也是一个惯例,并且是国际惯例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值