20190723_C中的调用可变函数

今天联系了 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]
*/
 

猜你喜欢

转载自www.cnblogs.com/codebeef0911/p/11231346.html