| 4 | 1/1 | 返回列表 |
| 查看: 585 | 回復(fù): 3 | ||
| 【獎(jiǎng)勵(lì)】 本帖被評(píng)價(jià)2次,作者yalefield增加金幣 1.5 個(gè) | ||
yalefield金蟲 (文壇精英)
|
[資源]
【分享】C語言,怎么玩可變參數(shù) 已有1人參與
|
|
|
printf()函數(shù)原型為: int printf( const char* format, ...); 這里面就有可變參數(shù),三個(gè)點(diǎn) ... printf("%d",i); printf("%s",s); printf("the number is %d ,string is:%s", i, s); 這三個(gè)點(diǎn),能應(yīng)付那么多情況.......羨慕嫉妒恨! 怎樣寫一個(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; } 使用可變參數(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ù)的類型,才能得到參數(shù)的值。 、侨缓笥胿a_start宏初始化⑵中定義的變量arg_ptr,這個(gè)宏的第二個(gè)參數(shù)是可變參數(shù)列表的前一個(gè)參數(shù),也就是最后一個(gè)固定參數(shù)。 ⑷然后依次用va_arg宏使arg_ptr返回可變參數(shù)的地址,得到這個(gè)地址之后,結(jié)合參數(shù)的類型,就可以得到參數(shù)的值。然后進(jìn)行輸出。 ⑸設(shè)定結(jié)束條件,這里的條件就是判斷參數(shù)值是否為-1。注意被調(diào)的函數(shù)在調(diào)用時(shí)是不知道可變參數(shù)的正確數(shù)目的,程序員必須自己在代碼中指明結(jié)束條件。 |
金蟲 (職業(yè)作家)
| 4 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 一志愿哈爾濱工業(yè)大學(xué)材料與化工方向336分 +12 | 辰沐5211314 2026-03-26 | 12/600 |
|
|---|---|---|---|---|
|
[考研]
|
gr哈哈哈 2026-03-28 | 3/150 |
|
|
[考研] 化工專碩求調(diào)劑 +5 | question挽風(fēng) 2026-03-24 | 5/250 |
|
|
[考研] 調(diào)劑 +3 | GK72 2026-03-30 | 3/150 |
|
|
[考研] 085600 295分求調(diào)劑 +5 | W55j 2026-03-30 | 7/350 |
|
|
[考研] 08工科,295,接受跨專業(yè)調(diào)劑 +3 | lmnlzy 2026-03-30 | 3/150 |
|
|
[考研] 329求調(diào)劑,一志愿西北工業(yè)大學(xué),材料工程(085601) +5 | 小小機(jī)靈蟲 2026-03-29 | 11/550 |
|
|
[考研] 化學(xué)工程085602 305分求調(diào)劑 +25 | RichLi_ 2026-03-25 | 25/1250 |
|
|
[考研] 298求調(diào)劑 +3 | 種圣賜 2026-03-29 | 3/150 |
|
|
[考研] 305求調(diào)劑 +8 | RuiFairyrui 2026-03-28 | 8/400 |
|
|
[考研] 本科雙非材料,跨考一志愿華電085801電氣,283求調(diào)劑,任何專業(yè)都可以 +6 | 芝士雪baoo 2026-03-28 | 8/400 |
|
|
[考研] 食品工程專碩一志愿中海洋309求調(diào)劑 +4 | 小張zxy張 2026-03-26 | 8/400 |
|
|
[考研] 275求調(diào)劑 +10 | jjjjjjjjjjl 2026-03-27 | 10/500 |
|
|
[考研] 一志愿上海理工能源動(dòng)力(085800)310分求調(diào)劑 +3 | zhangmingc 2026-03-27 | 4/200 |
|
|
[考研] 一志愿吉大071010,316分求調(diào)劑 +3 | xgbiknn 2026-03-27 | 3/150 |
|
|
[考研] 286求調(diào)劑 +4 | lim0922 2026-03-26 | 4/200 |
|
|
[考研] 085601求調(diào)劑總分293英一數(shù)二 +4 | 鋼鐵大炮 2026-03-24 | 4/200 |
|
|
[考研] 303求調(diào)劑 +6 | 藍(lán)山月 2026-03-25 | 6/300 |
|
|
[考研] 材料專碩 335 分求調(diào)劑 +4 | 拒絕冷暴力 2026-03-25 | 4/200 |
|
|
[考研] 網(wǎng)絡(luò)空間安全0839招調(diào)劑 +4 | w320357296 2026-03-25 | 6/300 |
|