C max函式的形參列表是什麼

2021-08-21 02:04:45 字數 2240 閱讀 8387

1樓:天蠍神經俠侶

1:當無法列出傳遞函式的所有實參的型別和數目時,可用省略號指定參數列

void foo(...);

void foo(parm_list,...);

2:函式引數的傳遞原理

函式引數是以資料結構:棧的形式存取,從右至左入棧.eg:

先介紹一下可變參數列的呼叫形式以及原理:

首先是引數的記憶體存放格式:引數存放在記憶體的堆疊段中,在執行函式的時候,從最後一個開始入棧。因此棧底高地址,棧頂低地址,舉個例子如下:

void func(int x, float y, char z);

那麼,呼叫函式的時候,實參 char z 先進棧,然後是 float y,最後是 int x,因此在記憶體中變數的存放次序是 x->y->z,因此,從理論上說,我們只要探測到任意一個變數的地址,並且知道其他變數的型別,通過指標移位運算,則總可以順藤摸瓜找到其他的輸入變數。

下面是 裡面重要的幾個巨集定義如下:

typedef char* va_list;

void va_start ( va_list ap, prev_param );

type va_arg ( va_list ap, type );

void va_end ( va_list ap );

va_list 是一個字元指標,可以理解為指向當前引數的一個指標,取參必須通過這個指標進行。

在呼叫參數列之前,定義一個 va_list 型別的變數,(假設va_list 型別變數被定義為ap);

然後應該對ap 進行初始化,讓它指向可變參數列裡面的第一個引數,這是通過 va_start 來實現的,第一個引數是 ap 本身,第二個引數是在變參表前面緊挨著的一個變數,即「...」之前的那個引數;

然後是獲取引數,呼叫va_arg,它的第一個引數是ap,第二個引數是要獲取的引數的指定型別,然後返回這個指定型別的值,並且把 ap 的位置指向變參表的下一個變數位置;

獲取所有的引數之後,我們有必要將這個 ap 指標關掉,以免發生危險,方法是呼叫 va_end,他是輸入的引數 ap 置為 null,應該養成獲取完參數列之後關閉指標的習慣。

例如 int max(int n, ...); 其函式內部應該如此實現:

int max(int n, ...)

va_end(ap); // 善後工作,關閉 ap

return max;

}// 在主函式中測試 max 函式的行為(c++ 格式)

int main()

基本用法闡述至此,可以看到,這個方法存在兩處極嚴重的漏洞:其一,輸入引數的型別隨意性,使得引數很容易以一個不正確的型別獲取一個值(譬如輸入一個float,卻以int型去獲取他),這樣做會出現莫名其妙的執行結果;其二,變參表的大小並不能在執行時獲取,這樣就存在一個訪問越界的可能性,導致後果嚴重的 runtime error。

#include

void fun(int a, ...) }

int main()

output::

1 2 3 4

2樓:

template const t& max (const t& a, const t& b);//只要直接呼叫max(t,t)形參為要比較的兩個元素(型別相同)即可。

以後要查詢相關函式及用法可以在**中直接輸入:cplusplus.com就可以查到相關函式的形參列表和函式實現。

c++裡面 函式的形參 是什麼意思

3樓:匿名使用者

///形參

///youngto

public void testchange(refstringstrparameter)

}classprogram}}

輸出的值為:

default value

change value

change value

在上面的"main()」主 程式當中演示了實參"strargument"的值在形參的作用域當中因形參"strparameter"的改變而改變了。

c++函式形參列表中(account&)是什麼意思 為什麼&在後面

4樓:

#include

using namespace std;

class account

int i;

怎樣定義C語言函式中的引數 實參 形參

int fun int x,int y x,y就是 du形zhi 參dao main include void add int x,int y 定義函式時候,函自數的參bai數就是形參,void main c語言中什麼是形參,什麼是實參?形參 全稱為 形式引數 是在定義函式名和函式體的時候使用的引數...

為什麼說向函式傳遞引用實現了形參和實參的資料雙向傳遞

引用傳遞就是將實參地址傳遞給函式,函式接收到地址後並不另外在棧上分配臨時記憶體空間版儲存該地址,而是直權接當做實參本身使用,如果實參含有有效資料,則函式可以通過引用直接取出 讀 也可以對其賦值 寫 如果將實參傳遞給函式稱為正傳遞,那麼函式返回資料就是逆傳遞。由於函式返回值是通過退棧方式傳遞,而且編譯...

python中,定義的函式中的引數是什麼形式的?怎麼覺得和C中的靜態型別有點相似

嗯。同感。我感覺,它和c中靜態變數的引用,是一樣的 這樣說更客觀點 我的理解 python對具有相同 值 的同一資料型別在內部只有一個例項,任何專引用它的變數都是這個實屬例的一個 引用 指標 只有當這個變數會修改這個例項內容時才會產生新的例項並改變這個變數的指向。如 str a str2 a pri...