c 语言 va_list 实现变长参数的例子
以下是一个使用 va_list 实现变长参数的例子:
#include <stdio.h>
#include <stdarg.h>
void print_ints(int args, ...) {
va_list ap;
va_start(ap, args);
for (int i = 0; i < args; i++) {
int num = va_arg(ap, int);
printf("%d ", num);
}
va_end(ap);
}
int main() {
print_ints(3, 1, 2, 3);
return 0;
}
该程序定义了一个名为 print_ints
的函数,参数有一个整型 args
和一个变长参数列表 ...
。在函数内部我们声明了一个 va_list
类型的变量 ap
,并使用 va_start
宏将变长参数列表初始化为 ap
。然后使用 va_arg
宏来迭代变长参数列表,每次取出一个 int
类型的值 num
并打印到标准输出。最后用 va_end
宏释放变长参数列表。在 main
函数中我们调用了 print_ints
函数,传入的参数为 3, 1, 2, 3
,会输出 1 2 3
。
cpp 语言折叠表达式实现变长参数的例子
以下是一个使用折叠表达式(fold expression) 实现变长参数的例子:
#include <iostream>
template<typename... Args>
void print(Args... args) {
(std::cout << ... << args) << std::endl;
}
int main() {
print(1, 2, "three");
return 0;
}
该程序定义了一个模板函数 print
,参数有一个可变模板参数列表 Args... args
。在函数内部我们使用折叠表达式,将所有参数的值依次输出到标准输出流中。在 main
函数中我们调用了 print
函数,并传入了三个参数 1, 2, "three"
。该程序会输出以下内容:
12three
其中 1
, 2
, three
分别对应三个参数的值。折叠表达式 (...)
将多个参数值按照顺序组合在一起,然后使用 <<
连接符将它们输出到标准输出流中。最后用 endl
操作符输出一个换行符。
python 语言 pack parmerater 实现变长参数的例子
以下是一个使用 *args
和 **kwargs
实现变长参数的例子:
def print_args(*args, **kwargs):
print("Positional arguments:")
for arg in args:
print(arg)
print("Keyword arguments:")
for key, value in kwargs.items():
print(key, "=", value)
print_args(1, 2, 3, a="four", b="five")
该程序定义了一个名为 print_args
的函数,参数有一个 *args
和一个 **kwargs
。其中 *args
表示接收任意数量的位置参数,它会被打包成一个元组;**kwargs
表示接收任意数量的关键字参数,它会被打包成一个字典。在函数内部我们遍历 args
和 kwargs
,并将其内容输出到标准输出。在 main
函数中我们调用了 print_args
函数,传入了四个位置参数和两个关键字参数,会输出以下内容: