C語言函數變參問題

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章