基于一些开发需求,我们会不知道传入函数的参数个数,且这类参数有相同的内部处理逻辑时,可用到C语言的可变参数特性
上个例子可明白其用法:一个是通过C语言的库函数,一个是通过指针,再一次说明指针的强大和灵活。
#include <stdio.h> #include <stdlib.h> #include <stdarg.h> // 通过 arg 的方式 int mul1(int num, int data1, ...) { int total = data1; int arg; va_list ap; // 变参指针,用来指向将要操作的变参 va_start(ap, data1); // 初始化变参指针,以指向可变参数列表中未命名的第一个参数,即data1后 for(int i = 1;i < num;i++) { arg = va_arg(ap, int); //将变参指针指向下一个 可变参数 total *= arg; } va_end(ap); return total; } // 通过指针的方式 long mul2(int i, ...) { int *p; p = &i + 1; long s = *p; for(int j = 1;j < i;j++) s *= p[j]; return s; } int main() { printf("%d\n", mul1(3, 2, 3, 4)); //24 printf("%d\n", mul2(3, 2, 3, 4)); //24 return 0; }