函数的可变参数

前序

对于c来说这是可行的

#include <stdio.h>

int f()
{
}

int main()
{
    f(1,2,3);  //注意这里的f(),没有形参,我却传了3个,但如果f(int, int) //而你传4个形参就是不行,这个问题c++中不会,它的类型检查严格哪个都不行。
}

可变参数列表

头文件#include<stdarg.h>

//定义可变参数  的函数
double average(int n,...)
{
    char *p = NULL;

    p = (char *)(&n) + 4;

    double sum = 0;

    //n显示后面有几个参数    
    for(int i = 0;i < n;i++){
        sum += *(int *)(p+i*sizeof(int));   
    }

    p = NULL;

    return sum/n;
}

//定义可变参数  的函数
double average(int n,...)
{
    va_list var_arg;    //类似于上面的p

    va_start(var_arg,n);  //p=init,n用于确定偏移的初始地址

    double sum = 0;

    for(int i = 0;i < n;i++){
        //p's 取值,var_arg指针变量,double每次偏移大小
        sum += va_arg(var_arg,double); 
    }

    va_end(var_arg);         //注意指针置空

    return sum/n;
}

int main()
{
    double a = 10.0,b = 2.2;
    //add(a,b,2.90,9,0,9,8,7);

    //函数调用时,      第一个参数 必须int类型(表示可变参数个数),
    //                  可变参数列表 所有数据类型必须一致,  和具体函数实现类型必须一致
    double ret = average(3,a,b,6);
    cout << "average(2,a,b): " << ret << endl;

    return 0;
}

注意几个地方: va_list va_start() va_arg() va_end()

带缺省参数的函数


注意缺省的参数必须放在形参列表的最右端


#include <iostream>

using namespace std;

int f(int , int = 5);

int main()
{
    int res;

    res = f(4);

    cout << res << endl;
    cout << f(5,5) << endl;

}

int f(int a, int b)
{
    return a + b;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值