关于C标准库stdarg.h
看《数据结构(C语言版)》(严蔚敏)时看到p94上面va_list啥的,看不懂了,于是整理一下这一部分的知识。
1/当无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表。
int sum(int n, ...) //三个点是占位符,表示参数个数不确定
2/stdarg.h头文件中定义了一个变量类型va_list(char*)
和三个宏,这三个宏可用于在参数个数未知时获取函数中的参数。
其中va是variable argument的缩写。
3/使用方法
B站上看到的例子:
int sum(int n, ...){//第一个参数是输入n个数
int i, sum = 0;
va_list vap;//定义参数列表
va_start(vap, n);//初始化参数列表,n是第一个参数的名称
for(i=0; i < n; i++){
sum += va_arg(vap, int); //获取参数值
}
va_end(vap); //关闭参数列表
return sum;
}
int main(){
int result;
result = sum(3, 1, 2, 3);
printf("result=%d\n", result);
return 0;
}
输出result=6
其中,
1) va_start(vap, n)
从这里开始读参数,把地址放在vap,读n个参数。
2)va_arg
的返回值就是那个type,比如读字符串的话就可以这样: strcpy(str, va_arg(argp, char*));
3)使用方法是①先定义va_list类型的变量ap;②调用va_start(),让ap指向可变参数表里面的第一个参数。③调用va_arg(),获取参数值。④va_end(ap)关掉它。
4/在检索资料时得到的小知识--函数参数是以栈的形式存取,从右至左入栈。
本文来自博客园,作者:EisenJi,转载请注明原文链接:https://www.cnblogs.com/eisenji/p/15876740.html