c 基礎之長度可變型別相同的引數列表

2021-07-04 16:58:29 字數 1210 閱讀 3952

為了簡化編碼,c#提供了乙個特殊的關鍵字params,允許在呼叫方法時提供數量可變的實參,而不是由方法實現固定好的形參數量。先看**吧。

using system;

using system.linq;

using system.io;

class helloworld );

console.writeline(fullname);

console.readline();

}public static string combine(params stringpaths)

return result;

}}

第乙個combine()呼叫了四個引數。第二個呼叫了3個引數,最後乙個呼叫中,引數用乙個陣列來代替。換言之,combine()方法接受數量可變的引數,這些引數要麼是以逗號隔開,要麼是單個字串陣列,前者的語法成為方法呼叫的」展開形式「,後者稱為正常形式。

為了獲得這樣的效果 combine()方法需要:

(1) 在方法的最後乙個引數之前新增params關鍵字。

(2)將最後乙個引數宣告為陣列。

呼叫system.io.path.combie()方法,該方法能自動合併路徑中的不同部分,並能正確使用平台的特有的目錄分隔符,注意combine()完全等價於這個方法,處理引數數量可變的引數。而不是只能處理兩個。

可變引數要注意下面這些地方:

~引數陣列不一定是方法的唯一引數,但必須是方法宣告的最後乙個引數。由於只有最後乙個引數才可能是引數陣列,所以方法最多只有乙個引數陣列。

~呼叫者可以指定和引數對應的零個實參,這會造成傳遞的引數陣列包含零個資料項。

~引數陣列是型別安全的,實參的型別必須相容於引數陣列元素的型別。

~呼叫者可以顯示的使用陣列,而不是以逗號分隔的引數列表,最終生成的cil**是一樣的。

~假如目標的實現要求乙個最起碼的引數數量,請在方法宣告中顯示指定必須提供的引數。這樣如果遺漏要求的引數,會導致編譯器報錯,而不需要依賴執行時錯誤處理,例:

如果乙個方法要求乙個或多個整型實參,那就應該使用int max(int first,params int operands)來宣告這個方法,而不是使用int max(params int operands)來宣告,這樣確保至少有乙個整數實參傳給max();

使用引數陣列,可以將型別相同型別的,數量可變的多個引數傳給方法。 在後面會討論如何支援不同型別的,數量可變的引數。

c語言的可變引數

一 寫乙個簡單的可變引數的c函式 下面我們來 如何寫乙個簡單的可變引數的c函式.寫可變引數的 c函式要在程式中用到以下這些巨集 void va start va list arg ptr,prev param type va arg va list arg ptr,type void va end ...

C語言的可變引數

我這是vc2008 sp1 void fun int i,在vadefs.h中,va list 的定義是 typedef char va list va list arg ptr va start用於初始化這個char 第乙個引數是想要初始化的指標,第二個引數是 前面的變數名 這裡是 i va st...

C可變引數的函式

有的時候函式的引數個數在呼叫的時候才確定,這時函式的引數為可變引數 使用可變引數時用到的幾個庫函式 void va start va list arg ptr,prev param type va arg va list arg ptr,type void va end va list arg pt...