程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言可變參數的簡單理解-計算最大值

C語言可變參數的簡單理解-計算最大值

編輯:關於C語言

可變參數是C裡面的一個使用技巧,用宏來實現的,其實主要是根據一個可變參數指針,然後不斷的往後移指針。

但是理解是怎麼用的,還是比較容易的。


[cpp] 
#include <stdarg.h>//<SPAN style="COLOR: #ff0000">使用可變參數需要的頭文件</SPAN>  
#include <stdio.h>  
 
int max(int count, ...){ 
        va_list ap;//1)定義一個可變參數,這個地方其實是一個指針,用於訪問可變參數中的參數列表  
        va_start(ap,count);//2)初始化可變參數,並把剛定義的指針指向第一個參數。  
        int maximum = -1;//假設這都是正整數求最大值,如果不是,就可以把maximum設為最大的負數  
        int temp,i; 
        for(i = 0; i < count; i++) { 
                temp = va_arg(ap, int);//從可變參數列表指針的當前位置獲取一個int型參數,並把指針指向下一個參數。  
                if(maximum < temp) 
                        maximum = temp; 
        } 
        va_end(ap);//結束  
        return maximum; 

 
int main(int argc,char **argv){ 
        int ret_max = max(9,1,6,21,32,5,68,15,32,62); 
        printf("max in (9,1,6,21,32,5,68,15,32,62) is %d",ret_max); 
        return 0; 

#include <stdarg.h>//使用可變參數需要的頭文件
#include <stdio.h>

int max(int count, ...){
        va_list ap;//1)定義一個可變參數,這個地方其實是一個指針,用於訪問可變參數中的參數列表
        va_start(ap,count);//2)初始化可變參數,並把剛定義的指針指向第一個參數。
        int maximum = -1;//假設這都是正整數求最大值,如果不是,就可以把maximum設為最大的負數
        int temp,i;
        for(i = 0; i < count; i++) {
                temp = va_arg(ap, int);//從可變參數列表指針的當前位置獲取一個int型參數,並把指針指向下一個參數。
                if(maximum < temp)
                        maximum = temp;
        }
        va_end(ap);//結束
        return maximum;
}

int main(int argc,char **argv){
        int ret_max = max(9,1,6,21,32,5,68,15,32,62);
        printf("max in (9,1,6,21,32,5,68,15,32,62) is %d",ret_max);
        return 0;
}

 


基本上使用可變參數,都是這幾步曲:

在調用參數表之前,定義一個 va_list 類型的變量。va_list ap ;

對 ap 進行初始化,讓它指向可變參數表裡面的第一個參數,這是通過 va_start 來實現的,第一個參數是 ap 本身,第二個參數是在變參表前面緊挨著的一個變量;這時候,可以直接把ap作為參數給printf等函數來用的。如:printf(msg,ap);

如果需要自己獲取參數的話,可以調用va_arg,對很多打印的業務來說,這一步不是必須的。調用 va_arg,它的第一個參數是 ap,第二個參數是要獲取的參數的指定類型,然後返回這個指定類型的值,並且把 ap 的位置指向變參表的下一個變量位置;

獲取所有的參數之後,我們有必要將這個 ap 指針關掉,以免發生危險,方法是調用 va_end,他是輸入的參數 ap 置為 NULL,應該養成獲取完參數表之後關閉指針的習慣,這也是一個慣例,並且是國際慣例。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved