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 函数,传入了四个位置参数和两个关键字参数,会输出以下内容: