关于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/在检索资料时得到的小知识--函数参数是以栈的形式存取,从右至左入栈。

posted @ 2022-02-09 20:56  EisenJi  阅读(85)  评论(0编辑  收藏  举报