可變參數列表 va_list

       可變參數列表,指的是函數的參數個數是可變的,但我們寫一個子函數實現某個功能的時候,我們通常通過實參和形參的形式把參數傳遞給子函數。而可當我們使用va_list變參數列表的時候形參和實參的傳遞就變得相對靈活了。我們通過兩個簡單的函數比較二者區別。

常規的實參形參一一對應的形式相信大家都爛熟於心了,這裏就不寫了。我們來看看用可變參數列表寫的求和還有找最值。

#define _CRT_SECURE_NO_DEPRECATE 1
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
int sum(int n, ...)
{
  
   va_list arg;
   int i = 0;
   int tmp = 0;
   va_start(arg,n);
   for(i=0; i<n; i++)
   {
   tmp+=va_arg(arg,int);
   }
   va_end(arg);
   return tmp;
}
int Max(int n, ...)
{
	int i = 0;
	int max=0;
	va_list arg;
	va_start(arg,n);
	max = va_arg(arg,int);
	for(i=0; i<n-1; i++)
	{
	   int tmp = va_arg(arg,int);
	   if(max<tmp)
	   {
	      max = tmp;
	   }
	}
	return max;
}
int main()
{
	int ret = 0;
        ret = sum(3,3,3,4);
	printf("求和結果爲 :%d \n",ret);
	ret = Max();
	printf("最大值爲   :%d \n",ret);
        system("pause");
        return 0;
}


在使用可變參數列表的時候有一點值得注意:1  每調用一次va_arg(),可變參數列表的指針就會自動指向下一個參數,在尋找最大值的子函數實現是就先用tmp將可變參數先保                                                                                       存起來,再經過比較tmp和max最後賦值,如果是直接把可變參數和max比較,再調用va_arg()賦值的話其實是把可變參數接                                                                                         來的那個參數賦給了max而不是你想賦的那個值。


                                                                                2  在使用其元素的時候 必須是連續的,不能出現跳變。



發佈了55 篇原創文章 · 獲贊 47 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章