第5章 4 可變引數列表

2021-09-23 22:56:22 字數 1667 閱讀 5890

當呼叫方法時,方法的引數個數或型別未知時,稱其為可變引數列表。可以使用object

陣列來實現這樣的功能。因為,所有的類都是直接或間接繼承於

object類。

1. 在沒有可變引數列表的時候,是用陣列實現類似的功能,看下面的例子:

class a1{}

public class varargs

public static void main(string args));

printarray(new object);

printarray(new object);

}}

tostring()方法的預設行為是,列印類的名字和物件的位址。

如下面的**:

class a{}

public class newvarargs

public static void main(string args));

printarray();

}}

3. 可變引數列表也可以使用

object

以外的型別,但是傳入引數為其他型別時,就會丟擲異常。

public class test } 

public static void main(string args) }

class book

4. 可變引數列表中基本型別和非基本型別可以同時使用:

public class autoboxin**arargs 

public static void main(string args)

}

5. 過載

編譯器會根據引數型別匹配最明確的方法,但可變引數列表仍然是過載變得不安全。

public class overloadin**arargs 

static void f(integer...args)

static void f(long...args)

static void f(double...args)

public static void main(string args)

}

上面的例子得到了正確的匹配,但對語句f()

,編譯器就懵逼了。

我們可能想過在某乙個方法中增加乙個非可變引數來解決該問題,但這是不被允許的:

public class overloadin**arargs2 

static void f(character...args)

public static void main(string args)

}

如果給兩個方法都新增乙個非可變引數,問題就解決了。即過載的方法必須保持一致的引數形式!

public class overloadin**arargs2 

static void f(char c,character...args)

public static void main(string args)

}

可變引數列表

模擬實現printf函式 va list是在c語言中解決變參問題的一組巨集,所在標頭檔案 include 用於獲取不確定個數的引數 va start,函式名稱,讀取可變引數的過程其實就是在堆疊中,使用指標,遍歷堆疊段中的引數列表,從低位址到高位址乙個乙個地把引數內容讀出來的過程 va arg,這個巨...

可變引數列表

小二,上 class a public class varargs two param static void twostringparam string a,string b three param 參照上兩種寫法,一直往後面加。是不是感覺很憂傷 幸好這不是真的。string.a static v...

可變引數列表

測試環境 vs2008 1 可變引數列表 為什麼需要可變引數呢?在函式原型中,列出了函式期望接受的引數,原型只能顯示固定數目的引數,如果函式原型列出的引數與可呼叫引數不匹配或數目不一樣,程式將無法執行。例如,我們想要求一系列值的平均值,這裡的一系列的數目是不確定的,如果這些值儲存於陣列中,這個任務就...