『C语言』不定参数列表

本篇博客来介绍一下C语言中不定参数列表的使用方式。

我们通常使用的函数,参数列表都是固定的,如果我们想要使用一个同一个函数,可以传入不同的参数个数,该如果解决呢
在C++/Java中,我们可以使用函数重载来实现上述问题,但是如果传入的参数个数不能确定,函数重载也没有办法

下面,我们来看看C语言中是如何实现这个问题的
C语言中通过一组宏来实现

  • va_list:定义了一个指针argv,用于指示可选的参数。
  • va_start(argv, argc):使参数列表指针argv指向函数参数列表中的第一个可选参数argc是位于第一个可选参数之前的固定参数,或者说是最后一个固定参数。如有一个函数的声明为:void va_test(int argc, ...);则它的固定参数就是argc,最后一个固定参数也是argc,因此就是va_start(argv, argc);
  • va_arg(argv, type):返回参数列表中指针argv所指的参数,返回类型为type。并使指针argv指向参数列表中下一个参数。返回的是可选参数,不包括固定参数
    但是注意,这里的type不能是以下类型char、signed char、unsigned char、short、unsigned short、signed short、short int、signed short int、unsigned short int、float
  • va_end(argv)清空参数列表,并置参数指针argv无效。

使用上述的宏,需要包含头文件stdarg.h

我们来看一下这组宏底层的实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码演示

#include <stdio.h>
#include <stdarg.h>

int sum(int argc, ...) {
	int result = 0;

	va_list argv;
	va_start(argv, argc);

	for (int i = 0; i < argc; ++i) {
		result += va_arg(argv, int);
	}

	va_end(argv);

	return result;
}

int main() {
	int result;

	result = sum(5, 1, 2, 3, 4, 5);
	printf("result: %d\n", result);

	result = sum(7, 1, 2, 3, 4, 5, 6, 7);
	printf("result: %d\n", result);

	result = sum(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
	printf("result: %d\n", result);

	return 0;
}

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值