C中 stdarg.h

#include<stdarg.h>

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

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

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

va_start使va_list指向起始的参数  

va_arg检索参数C89

va_end释放va_list

va_copy拷贝va_list的内容

例1:

可变参数的函数

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

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<windows.h>
#include<stdarg.h>//有很多宏,可以处理可变参数的函数

double add(int num, ...)//可变参数,至少要定义一个
{
    double last = 0.0;
    int i;

    va_list argp;//创建一个char类型的指针
    va_start(argp, num);//从这里开始读取参数,读取num个参数,并把地址放在argp

    for (i = 0;i < num;i++)
    {
        double temp = va_arg(argp, double);
        printf("%f\n", temp);
        last += temp;
    }
    va_end(argp);//结束读取

    return last;
}

int main()
{
    int x = 10;
    double jieguo = 0;

    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个参数

    printf("last=%f", jieguo);


    system("pause");
return 0;
}

例2:

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

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<windows.h>
#include<stdarg.h>//有很多宏,可以处理可变参数的函数
#include<string.h>

void go(int num, ...)
{
    int i;
    
    va_list argp;//定义指针,用于存储地址,不能加星号*

    va_start(argp, num);//代表有num个参数

    for (i = 0;i < num;i++)
    {
        char str[50];//保存读取的字符串参数
        strcpy(str, va_arg(argp, char *));//按照字符串的参数读取一个参数,复制到str
        printf("%s", str);
        system(str);
    }
    va_end(argp);//结束读取
}

void main()
{
    go(5, "notepad", "calc", "tasklist", "ipconfig", "mspaint");
}

 

参考:

#include <stdarg.h>

C 标准库 - <stdarg.h>

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值