#include?stdarg.h?????/*?必須頭文件,定義了各種變參宏?*/
公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出當(dāng)涂免費(fèi)做網(wǎng)站回饋大家。
void?myprint?(const?char*?format,?...)/*?和printf一樣?*/
{
va_list?vlist;//va_list的長度沒有辦法單獨(dú)算出來,只能從format格式列表中計算出,通常就是%的個數(shù),或者顯示地指出,比如下面一個例子
va_start(vlist,?format);
int?size?=?vprintf(format,?vlist);
va_end(vlist);
}
void?PrintFloats?(int?n,?...)/*?需要指定變參個數(shù)n?*/
{
int?i;
double?val;
printf?("Printing?floats:");
va_list?vl;
va_start(vl,n);
for?(i=0;in;i++)
{
val=va_arg(vl,double);
printf?("?[%.2f]",val);
}
va_end(vl);
printf?("\n");
}
操作符是地址運(yùn)算,獲得變量的存儲地址;而*則是間接訪問操作符,與指針一起使用,用于訪問指針?biāo)赶虻闹?,也就是說通過地址訪問地址處所存儲的變量。
舉個例子:
有變量a
=
8,存儲在地址0xFFA0處。
a,表示a存儲的地址,為0xFFA0,
*(指向a的指針),表示a的值=8,這里括號內(nèi)的“指向a的指針”其數(shù)值等于0xFFA0。
void
fun(char
*p);
//這里的形式參數(shù)p是一個指針,所以你要傳進(jìn)來的是個指針變量,也就是地址
void
main(void)
{
char
a=8;
fun(a);
//所以這里你需要計算出地址,然后傳給p
}
你可以這樣理解,fun()調(diào)用時相當(dāng)于
char
*p=a;
void
main(void)
{
char
a
=
8;
char
*pa;
pa
=
a;
fun(pa);
}
這與上面的表達(dá)是等價的。
就是把函數(shù)的返回值作為參數(shù)來調(diào)用外層函數(shù)。比如有返回兩個數(shù)的大者的函數(shù)int
max(int
a,int
b),那要求三個數(shù)的最大者就可以這么調(diào)用max(max(a,b),c);,就是先求得a、b中的大者再與c進(jìn)行比較……