龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

学点 C 语言(40): 函数 - 多参函数

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
像 printf 这种多参函数, 是借用 stdarg.h 中的宏实现的. va_list : 用于定义遍历参数列表的指针; va_start : 让指针指向第一个参数; va_arg : 获取下一个参数, 并向后移动一个位置; va_end : 释放指

  像 printf 这种多参函数, 是借用 stdarg.h 中的宏实现的.

va_list : 用于定义遍历参数列表的指针;

va_start : 让指针指向第一个参数;

va_arg  : 获取下一个参数, 并向后移动一个位置;

va_end  : 释放指针, 完成遍历.

  1. 整数求和:

  本例实现了对系列整数求和, 要求至少要有三个参数, 并且最后一个必须是 0.

  最后的 0 用于识别列表结束.

#include 

#include 

int sum(int n1, int n2, ...)

{

  /* 定义一个指向参数列表的指针, 必须是 va_list 类型 */

  va_list p;

  /* 定义输出变量, 并先获取前两个值 */

  int out = n1 + n2;

  /* 把指针指向最后一个明确的变量 */

  va_start(p, n2);

  /* 用 va_arg 获取下一个整数值, va_arg 会同时把指针向后移动整数大小的位置 */

  /* 本例是假定参数都是整数值, 遇 0 终止; 这样在使用是最后一个参数必须是 0 */

  while ((n2 = va_arg(p, int)) != 0) out += n2;

  

  /* 结束 */

  va_end(p);

  return(out);

}

int main(void)

{

  printf("%dn", sum(2,2,2,0));       /* 6 */

  printf("%dn", sum(1,2,3,4,5,6,7,8,9,0)); /* 45 */  

  getchar();

  return 0;

}

  2. 整数求和(修改版):

  这个函数要求至少要两个参数, 最后必须是 0.

#include 

#include 

int sum(int n1, ...)

{

  va_list p;

  int out = n1;

  va_start(p, n1);

  while ((n1 = va_arg(p, int)) != 0) out += n1;

  va_end(p);

  return(out);

}

int main(void)

{

  printf("%dn", sum(2,0));         /* 2 */

  printf("%dn", sum(1,2,3,4,5,6,7,8,9,0)); /* 45 */  

  getchar();

  return 0;

}

精彩图集

赞助商链接