当前位置: 代码迷 >> 综合 >> stdarg.h
  详细解决方案

stdarg.h

热度:14   发布时间:2023-12-25 02:40:18.0

#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\n", 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 }
文章出处:
https://www.cnblogs.com/denggelin/p/5487321.html