• #include <stdarg.h>


    #include<stdarg.h>

    stdarg.h是C语言中C标准函数库的头文件,stdarg是由standard(标准) arguments(参数)简化而来,主要目的为让函数能够接收可变参数。C++的cstdarg头文件中也提供这样的功能;虽然与C的头文件是兼容的,但是也有冲突存在。

    VA_LIST 是在C语言中解决变参问题的一组宏,所在头文件:#include <stdarg.h>,用于获取不确定个数的参数

    va_start,函数名称,读取可变参数的过程其实就是在堆栈中,使用指针,遍历堆栈段中的参数列表,从低地址到高地址一个一个地把参数内容读出来的过程·

    可变参数的函数

    可变参数不定,参数为整型

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<windows.h>
     5 #include<stdarg.h>//有很多宏,可以处理可变参数的函数
     6 
     7 double add(int num, ...)//可变参数,至少要定义一个
     8 {
     9     double last = 0.0;
    10     int i;
    11 
    12     va_list argp;//创建一个char类型的指针
    13     va_start(argp, num);//从这里开始读取参数,读取num个参数,并把地址放在argp
    14 
    15     for (i = 0;i < num;i++)
    16     {
    17         double temp = va_arg(argp, double);
    18         printf("%f
    ", temp);
    19         last += temp;
    20     }
    21     va_end(argp);//结束读取
    22 
    23     return last;
    24 }
    25 
    26 main()
    27 {
    28     int x = 10;
    29     double jieguo = 0;
    30 
    31     jieguo = add(x, 1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8, 8.9, 9.10, 10.11);//x不定,如果x为10,则要读入10个参数
    32 
    33     printf("last=%f", jieguo);
    34 
    35     system("pause");
    36 }

    可变参数不定,参数为字符串

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<windows.h>
     5 #include<stdarg.h>//有很多宏,可以处理可变参数的函数
     6 #include<string.h>
     7 
     8 void go(int num, ...)
     9 {
    10     int i;
    11     
    12     va_list argp;//定义指针,用于存储地址,不能加星号*
    13 
    14     va_start(argp, num);//代表有num个参数
    15 
    16     for (i = 0;i < num;i++)
    17     {
    18         char str[50];//保存读取的字符串参数
    19         strcpy(str, va_arg(argp, char *));//按照字符串的参数读取一个参数,复制到str
    20         printf("%s", str);
    21         system(str);
    22     }
    23     va_end(argp);//结束读取
    24 }
    25 
    26 main()
    27 {
    28     go(5, "notepad", "calc", "tasklist", "ipconfig", "mspaint");
    29 }
  • 相关阅读:
    键盘钩子在C#中的设计
    C++基础(学习笔记)
    WinCE5.0移动平台开发笔记(OpenNETCF.Desktop.Communication连接和断开使用心得)
    the underlying connection was closed:the server committed a protocol violation
    WinCE5.0移动平台开发笔记(c#中使用多线程访问winform中控件的若干问题(zt))
    WinCE5.0移动平台开发笔记(.Net主线程扑捉子线程中的异常)
    配置ActiveX控件在网页中下载安装
    C#值类型和装箱
    磁卡、条码卡、IC卡、CPU卡、RFID等常识(zt)
    CAB压缩工具安装(右键生成CAB压缩包)
  • 原文地址:https://www.cnblogs.com/denggelin/p/5487321.html
Copyright © 2020-2023  润新知