C语言函数变参问题

原创 2016年05月30日 17:29:14
C语言是支持函数的参数个数不确定的情况,例

如我们经常用的printf()函数就是如此。

<span style="font-family:Microsoft YaHei;">//extern void printf(const char *format,...);
 printf("i=%d;j=%d", i, j);</span>


上面的 参数 I 和 j 就是变参,我们无确定要给这个函数多少参数的时候就会想到用变参。

使用变参的方法如下:

1. 头文件:

<span style="font-family:Microsoft YaHei;">#include<stdarg.h></span>

2. 可以使用的方法:

<span style="font-family:Microsoft YaHei;">type va_arg(     //遍历参数表
   va_list arg_ptr,
   type 
);
void va_copy(   //复制参数表
   va_list dest,
   va_list src
); // (ISO C99 and later)
void va_end(    //释放参数表
   va_list arg_ptr 
);
void va_start(  //初始化参数表1
   va_list arg_ptr,
   prev_param 
); // (ANSI C89 and later)
void va_start(  //初始化参数表2
   arg_ptr 
);  // (Pre-ANSI C89 standardization version)</span>

3.现在我们举个实例
用getmax(int num,...)函数求最大值。
eg: getmax(3,1,2,3),求1,2,3的最大值
<span style="font-family:Microsoft YaHei;">#include<iostream>
#include<stdarg.h>
using namespace std;

//num必须是表示这个形参的个数
int getmax(int num,...)
{
	int m=-0xffffffff;      //初始化m为一个最小值
	va_list va;        //声明一个参数表
	va_start(va,num);  //初始化一个参数表
	while(num--)
	{
		int t=va_arg(va,int); //开始遍历参数表
		if(t>m)   //计算最大值
			m=t;
	}
	va_end(va);  //结束释放这个表
	return m;
}

void main()
{
/*	double i1=3,i2=8;
	long i3=44;*/
    int i1=3,i2=8;
	int  i3=44;
	cout<<"the max number is "<<getmax(3,i1,i2,i3)<<endl;
}</span>

输出结果是: the max number is 44



版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言有参函数调用时参数间数据传递问题

C语言中在发生有参函数调用时,实参变量与形参变量之间的数据都是单向的“值传递”方式。包括指针变量和数组名作参数的情况。 C语言要求函数的实参要有确定的值,在函数调用时给形参分配相应的内存单元,同...
  • shan1991fei
  • shan1991fei
  • 2016年05月02日 13:43
  • 5062

C语言中可变参数函数实现原理

C语言中可变参数函数实现原理
  • Li_Ning_
  • Li_Ning_
  • 2016年06月02日 23:52
  • 2811

C语言函数调用参数压栈的相关问题

参数入栈的顺序以前在面试中被人问到这样的问题,函数调用的时候,参数入栈的顺序是从左向右,还是从右向左。当时没有想清楚,随口就说从右向左。其实这个回答是不完全正确的。因为其实入栈的顺序,不同的体系架构是...
  • huangkangying
  • huangkangying
  • 2015年04月20日 20:19
  • 3670

C语言有参函数调用时参数间数据传递问题

C语言中在发生有参函数调用时,实参变量与形参变量之间的数据都是单向的“值传递”方式。包括指针变量和数组名作参数的情况。 C语言要求函数的实参要有确定的值,在函数调用时给形参分配相应的内存单元,同...
  • ywxk1314
  • ywxk1314
  • 2017年01月05日 10:40
  • 208

再谈C语言有参函数调用时参数值传递问题

C语言有参函数调用时参数间数据传递问题 C语言中在发生有参函数调用时,实参变量与形参变量之间的数据都是单向的“值传递”方式。包括指针变量和数组名作参数的情况。 C语言要求函数的实参要有确定的值,在...
  • i1369230032
  • i1369230032
  • 2012年04月24日 16:51
  • 3385

C语言有参函数调用时参数值传递问题

再谈C语言有参函数调用时参数值传递问题 分类: C/C++ 2012-04-24 16:51 1637人阅读 评论(0) 收藏 举报 C语言值传递参数传递指针长春工程学院c...
  • hehuimin6
  • hehuimin6
  • 2014年08月24日 22:03
  • 795

有趣的C语言--函数声明和形参问题

c语言中函数声明方式,以及相关的问题,通过实例讲解不同情况下构建函数产生的问题。...
  • oDeviloo
  • oDeviloo
  • 2016年07月28日 22:27
  • 1715

c语言之变参函数、calloc和布尔类型bool

#include #include #include #include #include #include #include //c语言之变参函数、calloc和布尔类型bool v...
  • earbao
  • earbao
  • 2016年12月03日 16:17
  • 231

C语言的那些小秘密之【变参函数的实现】

FROM: http://blog.csdn.net/bigloomy/article/details/6588354 =======================================...
  • dadoneo
  • dadoneo
  • 2013年03月05日 00:11
  • 686

c语言变参函数

C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数form...
  • yuanxiaori
  • yuanxiaori
  • 2013年11月09日 23:18
  • 562
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言函数变参问题
举报原因:
原因补充:

(最多只允许输入30个字)