C語言可變參數函數__函數

來源:互聯網
上載者:User

        C語言有一種實現可變參數的函數的方法就是使用預留位置,使用的方法就是採用如下的方式定義函數void frees(int size, ...)。其餘的地方和一般的函數定義是一樣的只是第二個參數上使用了三個點,而沒用採用一般的變數類型變數名的方式。只要採用這樣的定義方式,便可以使用這個函數來處理可變變數。但是光有這個定義還是不夠的,還需要藉助如下倆個函數一個類型定義,實際上這些函數是通過宏來實現的。

 

va_list

va_start();

va_arg();

 

va_list,這是個類型定義,我們可以把它理解成一個指標,它指向第一個參數的地址。如果,我們這樣定義: va_list ap;則ap就是這樣一種變數,它是指向所有參數中的第一個參數的。它不同於一般的指標變數,它是個複合變數。就是說可以通過這個變數找到,在調用這個函數是傳入的其他變數。但是我們不可以直接通過移動這個指標來指向下一個變數。剩下的工作就要通過下面的兩個方法了。

 

va_start(ap,size),那麼ap就指向第一個參數size了,並且可得到size的類型int。這時候如果有下一個參數,就需要使ap指向下一個參數,並且得到它的類型。

 

va_arg(ap,類型),這樣ap就指向一個參數,並且可以得到那個參數的類型了。注意。類型非常重要,學過指標的都應該清楚,指標的類型如果弄錯的話,位置正確,取出來的數可能也是亂七八糟的。

 

下面是使用C語言的這個特徵來編寫的一個可以釋放一系列記憶體空間的函數:

void frees(int size, ...){va_list ap;int i=0;va_start(ap, size);for(i=0; i<size; i++){void* ptr = va_arg(ap, void*);free2(ptr);}}

在使用的時候只需指明需要釋放的空間的指標的個數,以及他們的值,就可以了。

 

參考:簡單深入C語言中的函數,三個點函數

 


 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.