1樓:帝都小女子
在c編譯器通常提供了一系列處理可變引數的巨集,實現就像printf()那樣的變長引數列表,這樣可以遮蔽不同的硬體平臺造成的差異,增加程式的可移植性。這些巨集包括va_start、 va_arg和va_end等,這些巨集都是在標頭檔案裡定義的。
採用ansi標準形式時,引數個數可變的函式的原型宣告是:
type funcname(type para1, type para2, ...)
這種形式至少需要一個普通的形式引數,後面的省略號不表示省略,而是函式原型的一部分。type是函式返回值和形式引數的型別。
不同的編譯器,對這個可變長引數的實現不一樣 ,gcc4.x中是採用內建函式的方法來實現。
接下來我們看看以下示例**:
#include
#include
int sum (int n, ...)
return sum;
}int main(void)
當我們呼叫sum函式時,傳遞給sum函式的引數列表的第一個引數n的值是5,va_start 初始化p使其指向第一個未命名的引數(n是有名字的引數) ,也就是1(第一個),每次對 va_arg的呼叫,都將返回一個引數,並且把 p 指向下一個引數,va_arg 用一個型別名來決定返回的引數是何種型別,以及在 var_arg的內部實現中決定移動多大的距離才到達下一個引數。
2樓:匿名使用者
這樣定義是不行的,要使用引數可變的函式的話,必須有一個命名的引數。
必須這樣定義 void func( int iargcount, ... );
一般使用引數個數可變的函式,最後一個明確的引數一般定義為可變引數的個數。同時必須包含標頭檔案和
給你個完整的例子吧
#include
#include
void func( int icount, ... );
void func( int icount, ... )int main()
c++使用類别範本的引數列表
3樓:南非烏雀
類别範本定義:
定義一個類别範本,一般有兩方面的內容:
a。首先要定義一個類,其格式為:
template
class test
test為類名,在類定義體中,如果採用通用資料型別的成員,函式引數的前面需加上t,其中通用型別t可以作為普通成員變數的型別。還可以作為成員函式的引數和返回型別等。
關於類别範本的使用:類别範本的使用實際上是將類别範本例項化成一個具體的類,它的格式為:類名《實際的型別》
模板類是類别範本例項化後的一個產物,說個具體點的例子吧,我們把類别範本比作是一個做餅乾的模子,而模板類就是用這個模子做出來的餅乾,至於這個餅乾是什麼味道的就要看你自己在例項化時用的是什麼材料了,你可以做巧克力餅乾,也可以做牛奶餅乾,這些餅乾出了材料不一樣外,其它的東西都是一樣的了。
c為何類才能使用預設引數而函式c,為何模板類才能使用預設模板引數,而模板函式卻不能?求教。
這是因為函式是根據呼叫時的引數型別反推模板引數型別。而模板類别範本引數型別是你申明物件時給出的。好拗口啊!還是拿你的例子來舉例來說明好了 我們定義一個模板函式 template func t1 p1,t2 p2 然後在某一個地方呼叫 int x short y func x,y 編譯器編譯這裡的 時...
關於在c語言宣告帶有變長陣列引數的函式
在c語言中,函式中要用陣列做引數,可以採用三種方式,其中後兩種均可適用於變長陣列引數。1 直接以定長陣列做引數,宣告形式為 ret type func int a 100 這裡就是以100個元素的陣列做引數的。2 宣告時不帶長度,即 ret type func int a 3 以指標替代陣列,即 r...
C 成員函式的使用有哪些限制,C 類成員函式什麼情況下必須定義引數?
必須為其指標所指向的物件分配記憶體才可以進行strcpy操作。如果沒有分配記憶體,則 strcpy pname,p 把p複製到 沒有記憶體存放!這可能會導致未知的情況發生,程式會崩潰.以下是修改後的程式。注 用構造分配記憶體 new 必須要用析構 delete 釋放記憶體,否則會造成記憶體洩露 me...