void printvalues(int*);
void printvalues(int);
void printvalues(int[10]);//以上三種是等價的。
通常,將陣列形參直接定義為指標要比使用語法定義更好。
第三種方式,形參的長度容易引起誤解。
當編譯器檢查陣列形參關聯的實參時,它只會檢查實參是不是指標、指標的型別和陣列的型別是否匹配,而不會檢查陣列的長度。
和其他型別一樣,陣列形參可定義為引用或非引用型別。大部分情況下,陣列以普通的非引用型別傳遞,此時陣列會悄悄地轉換為指標。一般來說,非引用型別的形參會初始化為其相應實參的副本。而在傳遞陣列時,實參是指向陣列第乙個元素的指標,形參複製的是這個指標的值,而不是陣列元素本身。函式操縱的是指標的副本,因此不會修改實參指標的值。然而,函式可通過該指標改變它所指向的陣列元素的值。通過指標形參做的任何改變都在修改陣列元素本身
在《c++ primer 第四版》的第七章208頁,講到了通過引用傳遞陣列,和其他型別一樣,陣列形參可宣告為陣列的引用。如果形參是陣列的引用,編譯器不會將陣列實參轉化為指標,而是傳遞陣列的引用本身。在這種情況下,陣列大小成為形參與實參型別的一部分,編譯器檢查陣列實參的大小與形參的大小是否匹配。
int (&a)[13],兩邊的圓括號是必須的,因為的優先順序大於&
int &a[13]表示乙個指向13個整形引用的陣列,而(int &)a[13]表示含有13個整形元素陣列的引用
#includeusing namespace std;
void output(int (&a)[13])
void modify(int(&a)[13])
int main()
; output(a);
modify(a);
output(a);
return 0;
}
形參與實參值傳遞
形參變數只有在被函式呼叫的時候才分配記憶體單元,呼叫結束後即刻釋放所分配的記憶體單元。也就是在函式被呼叫時申請空間,此函式執行完後釋放空間。用如下 舉例 include void exchange int m,int n void exchange int m,int n int main 執行完之...
實參與形參的傳遞關係
當我們在主調函式中呼叫方法的時候,需要把型別匹配的實際的資料傳入到方法中。傳進去的那個資料就是實參,而在方法定義中接收引數的那個變數就是形參。下面分三種情況討論 1 傳遞基本資料型別 這種情況下,實參是把值傳遞給形參,形參在函式中改變值不會影響實參。2 傳遞實體物件 這種情況中,實參實際是把物件在堆...
形參與實參的區別。
1 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。2 實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。因此...