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