c语言 函数多个参数,C语言函数可变参数

C语言函数可变参数教程

可变参数的函数必须至少有一个强制参数,可选参数的类型可以变化。可选参数的数量由强制参数的值决定,或由用来定义可选参数列表的特殊值决定。

对于每一个强制参数来说,函数头部都会显示一个适当的参数,像普通函数声明一样。参数列表的格式是强制性参数在前,后面跟着一个逗号和省略号(…),这个省略号代表可选参数。

C语言函数可变参数详解

语法

type funcName(paramType1 param1, ...){

// 执行语句...

return val

}

参数

参数

描述

type

函数的返回值类型,如果没有任何返回值,则写 void,不可以死省略不写。

funcName

函数名。

paramType1

函数参数 param1 的类型

param1

函数参数

可变参数,即可以传递任何类型和个数的参数

return

可选,函数返回值使用的关键字。

val

函数需要具体返回的值。

说明

定义可变参数必须要有一个强制参数,这里的参数 param1 就是强制参数,最后的 ... 表示的是可变参数。

C语言函数可变参数使用

可变参数函数要获取可选参数时,必须通过一个类型为 va_list 的对象,它包含了参数信息。这种类型的对象也称为参数指针(argument pointer),它包含了栈中至少一个参数的位置。

可以使用这个参数指针从一个可选参数移动到下一个可选参数,由此,函数就可以获取所有的可选参数。va_list 类型被定义在头文件 stdarg.h 中。

当编写支持参数数量可变的函数时,必须用 va_list 类型定义参数指针,以获取可选参数。当我们处理可变参数时,主要涉及到以下几个宏函数:

va_start

语法

void va_start(va_list argptr, lastparam);

参数

参数

描述

argptr

定义好的 va_list 变量。

lastparam

强制参数。

说明

宏 va_start 使用第一个可选参数的位置来初始化 argptr 参数指针。该宏的第二个参数必须是该函数最后一个有名称参数的名称。必须先调用该宏,才可以开始使用可选参数。

va_arg

语法

type va_arg(va_list argptr, type);

参数

参数

描述

argptr

定义好的 va_list 变量。

type

可变参数的具体类型。

说明

展开宏 va_arg 会得到当前 argptr 所引用的可选参数,也会将 argptr 移动到列表中的下一个参数。宏 va_arg 的第二个参数是刚刚被读入的参数的类型。

va_end

语法

void va_end(va_list argptr);

参数

参数

描述

argptr

定义好的 va_list 变量。

说明

当不再需要使用参数指针时,必须调用宏 va_end。如果想使用宏 va_start 或者宏 va_copy 来重新初始化一个之前用过的参数指针,也必须先调用宏 va_end。

va_copy

语法

void va_copy(va_list dest, va_list src);

参数

参数

描述

dest

目的 va_list 变量。

src

源 va_list 变量。

说明

宏 va_copy 使用当前的 src 值来初始化参数指针 dest。然后就可以使用 dest 中的备份获取可选参数列表,从 src 所引用的位置开始。

案例

函数可变参数

用函数可变参数,实现求任意变量的和

#include

#include

int mulSum(int n, ...){

int i = 0;

int sum = 0;

va_list argptr;

va_start(argptr, n); // 初始化argptr

for (i = 0; i < n; i++) // 对每个可选参数,读取类型为int

{

sum += va_arg(argptr, int); //累加到 sum 中

}

va_end(argptr);

return sum;

}

int main(){

printf("嗨客网(www.haicoder.net)\n\n");

int mulSumRet = mulSum(4, 1, 3, 5, 8);

printf("mulSumRet = %d\n", mulSumRet);

return 0;

}

程序运行后,控制台输出如下:

9f6b04c0d5725f26218fc8c30a535c74.png

我们定义了一个函数 mulSum,该函数的第一个参数是一个 ... 表示是可变参数。

接着,我们使用该可变参数,实现了求出我们传入的所有数的和。

C语言函数可变参数总结

C 语言中函数的参数是支持可变参数的,即函数参数的个数是任意的。C 语言中的函数的可变参数主要依靠 va_start、va_arg 和 va_end 来实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值