美文网首页C语言C语言笔记
【C语言学习】如何创建变参函数?

【C语言学习】如何创建变参函数?

作者: 学以解忧 | 来源:发表于2019-08-29 16:38 被阅读0次

提到变参函数,我们的感觉是不是既熟悉又陌生?感觉熟悉是因为我们平时都在使用着,如我们常使用的printf()函数与scanf()函数就是典型的变参函数。因为printf()函数是变参函数我们才可以根据我们的需要灵活地输出变量的值。如:

printf("hi");    //给printf函数传入1个参数
printf("%d\n",a);  //给printf函数传入2个参数
printf("%s  %d", str, a); //给printf函数传入3个参数
...
...                      //给printf函数传入n个参数

我们可以根据需要给printf()函数传入n个参数,这就是变参函数。

感觉陌生是因为我们没有试着创建变参函数。要创建变参函数需要包含头文件stdarg.h,并且创建变参函数应按照如下步骤进行:

【第一步】定义一个使用省略号的函数原型,如printf()与scanf()函数的原型为

int printf (const char *__format, ...)
int scanf (const char*, ...);

【第二步】在函数定义中创建一个va_list类型的变量,用于存储不定的参数;

【第三步】用宏va_start把该变量初始化为一个参数列表;

【第四步】用宏va_arg访问参数列表;

【第五步】用宏va_end完成清理工作。

示例程序:

#include <stdio.h>
#include <stdarg.h>

/*【第一步】:定义一个使用省略号的函数原型 */
double sum(int lim, ...)  
{
 /*【第二步】:声明一个va_list类型的变量ap */
 va_list ap;    
 double sum = 0;  // 用于保存参数之和
 int i;
 /*【第三步】:使用va_start把变量ap初始化为参数列表 */
 va_start(ap, lim); 
 for (i = 0; i < lim; i++)
 {
   /*【第四步】: 使用va_arg访问参数列表。 
   这里第二个参数是double类型,传入的不定参数就应是double类型
   */
   sum += va_arg(ap, double);  
 }
 /*【第五步】:使用va_end完成清理工作 */
 va_end(ap);  

 return sum;
}

int main(void)
{
 double sum1 = 0, sum2 = 0;
 /* 计算 */
 sum1 = sum(3, 1.1, 2.2, 3.3);  
 sum2 = sum(6, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0);
 printf("sum1 = %f\n", sum1);
 printf("sum2 = %f\n", sum2);
 return 0;
}

变参函数sum()用于求lim个数之和,并且这lim个数的类型必须是double类型,因为sum函数实体中使用va_arg访问参数列表中的参数类型为double类型。

程序输出结果为:

image

以上就是关于可变参数的一点小总结,如有错误欢迎指出。


关注我的微信公众号【嵌入式大杂烩】,回复:C语言,可获取C语言资料。
关注我的个人博客【我的博客】查看更多笔记

相关文章

  • 函数变参的使用

    介绍C/C++,java,和go语言对函数变参的使用。 1. C/C++语言的变参 1.1 变参函数声明 变参函数...

  • 【C语言学习】如何创建变参函数?

    提到变参函数,我们的感觉是不是既熟悉又陌生?感觉熟悉是因为我们平时都在使用着,如我们常使用的printf()函数与...

  • 06-GoLang函数

    函数格式 C语言中 Go语言中 C语言函数的类型 1.没有返回值没有形参的函数 .2.有返回值没有形参的函数 3....

  • 变参(C语言)

    这是一个变参函数声明。加三个点就是了。取得参数的套路是 这样三步,就将 各个参数,放在了 buf 中。完整函数如下...

  • 总结

    今天我学习了C语言中的函数。函数的定义:函数返回值类型 int,函数名sum,形参(int a,int b),...

  • iOS多线程之pthread的简单使用

    前言 pthread是c语言编写的,基本用不到,了解一下就好. 线程创建代码 传参:C语言传参 oc传参

  • 【C编程】变参函数学习!

    程序运行结果:

  • go语言函数变参

    例子 函数变参的定义:func Printf(format string, a ...interface{}) (...

  • Block对变量的作用(二)

    常见的变量有哪些? 在C语言中常见的变量如下: 自动变量(Auto),也可以称为局部变量 函数参数(形参) 静态变...

  • OC内存区域

    c语言中形参和实参 形参 form parameter实参 real parameter出现在函数定义中的...

网友评论

    本文标题:【C语言学习】如何创建变参函数?

    本文链接:https://www.haomeiwen.com/subject/rcaiectx.html