今天联系了 C 中调用可变参函数
参考网站:https://www.runoob.com/cprogramming/c-standard-library-stdarg-h.html
代码1: 向被调用函数中传递3个int类型参数,并在被调用函数中输出
//可变参数 test 1 #include <stdio.h> #include <stdarg.h> #include <string.h> #pragma warning(disable:4996) void tLog(int sInfo, ...); int main() { int x1 = 1; int x2 = 2; int x3 = 3; int sInfo = 0; tLog(sInfo, x1, x2, x3); system("pause"); return 0; } void tLog(int sInfo, ...) { int sx1 = 0; int sx2 = 0; int sx3 = 0; //step1: 申请参数列表变量 va_list sArgv; //step2: 申明最后一个传递给函数的已知的固定参数 //这里是 sInfo = 0 va_start(sArgv, sInfo); /* step3: 依次读取固定参数 sInfo 后的 参数 */ sx1 = va_arg(sArgv, int); sx2 = va_arg(sArgv, int); sx3 = va_arg(sArgv, int); va_end(sArgv); printf("运行输出:[%d, %d %d %d]\n", sInfo, sx1, sx2, sx3); } /* 运行输出:[0, 1 2 3] */
代码2:向被调用函数中传递3个char* 类型参数,并在被调用函数中输出
1 //可变参数 test 1 2 #include <stdio.h> 3 #include <stdarg.h> 4 #include <string.h> 5 6 #pragma warning(disable:4996) 7 8 void tLog2(char* sInfo, ...); 9 10 int main() 11 { 12 char* str1 = "abc"; 13 char* str2 = "xyz"; 14 char* str3 = "yyh"; 15 16 char* sInfo = "start"; 17 18 tLog2(sInfo, str1, str2, str3); 19 20 system("pause"); 21 return 0; 22 } 23 24 void tLog2(char* sInfo, ...) 25 { 26 char* s1 = (char*)malloc(10); 27 char* s2 = (char*)malloc(10); 28 char* s3 = (char*)malloc(10); 29 30 /* 31 step 1,定义指向参数列表的变量 arg_ptr 32 申请参数列表变量 33 */ 34 va_list sArgv; 35 36 /* 37 step 2, 将 arg_ptr 变量初始化,让他指向参数列表得起始 i 38 // 申明最后一个传递给函数的已知的固定参数 39 */ 40 va_start(sArgv, sInfo); 41 42 /* 43 step 3, 依次读取固定参数 sInfo 后的 参数 44 */ 45 s1 = va_arg(sArgv, char*); 46 s2 = va_arg(sArgv, char*); 47 s3 = va_arg(sArgv, char*); 48 49 /* 50 step 4,清理工作 51 */ 52 va_end(sArgv); 53 54 printf("运行输出:[%s,%s %s %s]\n", sInfo, s1, s2, s3); 55 56 }
输出结果
/*
运行输出:[start,abc xyz yyh]
*/