您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“C語(yǔ)言可變參數(shù)怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“C語(yǔ)言可變參數(shù)怎么使用”吧!
一、什么是可變參數(shù)
我們?cè)贑語(yǔ)言編程中有時(shí)會(huì)遇到一些參數(shù)個(gè)數(shù)可變的函數(shù),例如printf()函數(shù),其函數(shù)原型為:
int printf( const char* format, ...);
它除了有一個(gè)參數(shù)format固定以外,后面跟的參數(shù)的個(gè)數(shù)和類(lèi)型是可變的(用三個(gè)點(diǎn)“…”做參數(shù)占位符),實(shí)際調(diào)用時(shí)可以有以下的形式:
printf("%d",i); printf("%s",s); printf("the number is %d ,string is:%s", i, s);
二、寫(xiě)一個(gè)簡(jiǎn)單的可變參數(shù)的C函數(shù)
先看例子程序。該函數(shù)至少有一個(gè)整數(shù)參數(shù),其后是占位符…,表示后面參數(shù)的個(gè)數(shù)不定. 在這個(gè)例子里,所有的輸入?yún)?shù)必須都是整數(shù),函數(shù)的功能是打印所有參數(shù)的值.
函數(shù)代碼如下:
//示例代碼1:可變參數(shù)函數(shù)的使用 #include "stdio.h" #include "stdarg.h" void simple_va_fun(int start, ...) { va_list arg_ptr; int nArgValue =start; int nArgCout=0; //可變參數(shù)的數(shù)目 va_start(arg_ptr,start); //以固定參數(shù)的地址為起點(diǎn)確定變參的內(nèi)存起始地址。 do { ++nArgCout; printf("the %d th arg: %d\n",nArgCout,nArgValue); //輸出各參數(shù)的值 nArgValue = va_arg(arg_ptr,int); //得到下一個(gè)可變參數(shù)的值 } while(nArgValue != -1); return; } int main(int argc, char* argv[]) { simple_va_fun(100,-1); simple_va_fun(100,200,-1); return 0; }
從這個(gè)函數(shù)的實(shí)現(xiàn)可以看到,我們使用可變參數(shù)應(yīng)該有以下步驟:
⑴在程序中將用到以下這些宏:
void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr );
va在這里是variable-argument(可變參數(shù))的意思.
這些宏定義在stdarg.h中,所以用到可變參數(shù)的程序應(yīng)該包含這個(gè)頭文件.
⑵函數(shù)里首先定義一個(gè)va_list型的變量,這里是arg_ptr,這個(gè)變量是指向參數(shù)地址的指針.因?yàn)榈玫絽?shù)的地址之后,再結(jié)合參數(shù)的類(lèi)型,才能得到參數(shù)的值。
⑶然后用va_start宏初始化⑵中定義的變量arg_ptr,這個(gè)宏的第二個(gè)參數(shù)是可變參數(shù)列表的前一個(gè)參數(shù),也就是***一個(gè)固定參數(shù)。
⑷然后依次用va_arg宏使arg_ptr返回可變參數(shù)的地址,得到這個(gè)地址之后,結(jié)合參數(shù)的類(lèi)型,就可以得到參數(shù)的值。然后進(jìn)行輸出。
⑸設(shè)定結(jié)束條件,這里的條件就是判斷參數(shù)值是否為-1。注意被調(diào)的函數(shù)在調(diào)用時(shí)是不知道可變參數(shù)的正確數(shù)目的,程序員必須自己在代碼中指明結(jié)束條件。
到此,相信大家對(duì)“C語(yǔ)言可變參數(shù)怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。