很巧我現(xiàn)在正好也有實(shí)現(xiàn)這樣函數(shù)的需求,其實(shí)就是看了C語言可變參數(shù)函數(shù)的相關(guān)資料,你就差不多知道怎么實(shí)現(xiàn)了。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供東興企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、做網(wǎng)站、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為東興眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
只不過其中有一個很重要的大坑,只要邁過去就沒問題。我是試了半天才明白的:
如果參數(shù)是char或float類型,這樣的參數(shù)放在可變參數(shù)部分的話,編譯器是會默認(rèn)把它們的類型提升為相應(yīng)的“全”類型的:char提升為int,float提升為double。如果你沒注意這一點(diǎn)就會出現(xiàn)錯誤。當(dāng)然可以通過指針的類型轉(zhuǎn)換來避免。
先簡略地點(diǎn)一下,等我在CSDN博客里詳細(xì)地寫一寫心得吧。雖然是N年前的問題估計樓主早就自己解決了,但希望能幫到其他人:)
在函數(shù)定義的時候就必須寫形參名了。聲明的時候不需要,因?yàn)榫幾g器還用不到,只要知道相應(yīng)位置是個啥類型的就行了
C語言中定義了va_list, va_start( ), va_arg( ), va_end( ) 這樣一組宏來處理可變參數(shù)問題。
可以參考printf的聲明,創(chuàng)建自己的實(shí)現(xiàn)函數(shù)。示例:
#includestdio.h
#includestdarg.h
void?va_fun(int?start,...)
{
va_list?arg_ptr;
int?nArgValue?=?start;
int?nArgCount?=?1;
va_start(arg_ptr,start);
while(nArgValue?!=?-1)
{
printf("arg?%d?is:%d/n",nArgCount,nArgValue);
nArgValue=va_arg(arg_ptr,int);
++nArgCount;?
}
return;?
}
main()
{
va_fun(5,1,7,-1);
printf("................/n");
va_fun(2,4,-1);
printf("................/n");
va_fun(-1);
printf("................/n");
//va_fun();?可變參數(shù)函數(shù)最少要有一個參數(shù)。
}
這樣的輸出結(jié)果是不確定的!
-------
分析:你在args函數(shù)中對不定參進(jìn)行遍歷,但要求最后是0時跳出循環(huán),
顯然main中的數(shù)據(jù)不符合要求,導(dǎo)致遍歷溢出,結(jié)果難以預(yù)測。
-------
修正:
void main(){
args(1,2,0);
}
輸出:
2
網(wǎng)頁題目:c語言函數(shù)不定參數(shù)怎么辦,c語言函數(shù)可以沒有參數(shù)嗎
URL鏈接:http://chinadenli.net/article8/hegiip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、建站公司、外貿(mào)建站、網(wǎng)站收錄、網(wǎng)站設(shè)計、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)