【C语言进阶深度学习记录】三十九 C语言中的可变参数(参数可变的函数)

用过printf()函数的热都知道,printf的参数可以有多个,它是可变的,根据我们输出参数的类型以及个数的不同来确定参数。今天来学习C语言中参数可变的函数是如何实现的。

文章目录

1 可变参数

首先我们要明白一点,在C语言中,参数可变的函数的实现,要依赖于头文件stdarg.h。所以在实现这样的函数的时候,需要包含该头文件。

其次,实现函数可变参数需要使用以下几个类型参数,我们需要熟练掌握它们的使用,下面先看看这些参数是什么?

  1. va_list:参数集合
  2. va_arg:取具体参数值
  3. va_start:标识参数访问的开始
  4. va_end:标识参数访问的结束

看了上面的参数的意义,还是不知道什么是什么。下面看一个例子,就能彻底明白了。

下面函数的意思是求n个数的平均值。这n个数直接作为参数传递给函数(这么写肯定是效率不高,这里只是为了学习使用)

  • 45-2.c
#include <stdio.h>
#include <stdarg.h>

float average(int n, ...){  //这个n代表参数的个数,后面的...代表后面的参数不确定是什么
    va_list args;      // args代表函数可变参数的集合
    int i = 0;
    float sum = 0;
    
    va_start(args, n); // 如果要遍历args参数的话,则从args参数集合的开始,遍历n次结束
    
    for(i=0; i<n; i++){
        sum+=va_arg(args, int);  // 开始遍历,取具体参数值,类型为int
    }
    
    va_end(args);      // 代表参数集合args访问结束
    
    return sum/n;
}

int main(){
    
    printf("%f\n", average(5,1,2,3,4,5));
    printf("%f\n", average(4,1,2,3,4));
    return 0;
}
  • 上述代码编译运行结果为:

在这里插入图片描述
上面代码不难,主要是学会使用那几个参数的使用。我们需要注意以下几点:

  • 可变参数必须从头到尾按照顺序逐个访问
  • 参数列表中,至少要存在一个确定的命名参数
  • 可变参数函数无法确定实际的参数的数量,需要在运行的时候根据具体的传参结果来计算
  • 可变参数函数,无法确定参数的实际类型

注意:如果va_arg中指定的参数的类型与实际的不匹配,那么最终的计算结果将是不可预测的。

2 总结

  • 学会定义可变参数的函数。主要是使用方法。
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值