C++中函數的數組形參


函數由函數名以及一組操作數類型唯一的表示。函數的操作數,也即形參(parameter),在一對圓括號中聲明,形參與形參之間以逗號分隔。

void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
在以上函數中,參數a b 就是 swap() 函數的形參。當調用該函數時

int i = 1;
int j = 2;
swap(i, j);
在以上代碼中,i j swap() 函數的實參。

1 參數傳遞

每次函數調用時,都會重新創建該函數的所有形參,此時所傳遞的實參將會初始化對應的形參。

1.1 非引用形參

普通的非引用類型的參數通過復制對應的實參實現初始化。當用實參副本初始化形參時,函數並沒有訪問調用所傳遞的實參本身,因此不會改變實參值。

 

 

 從圖1中可以看出,swap()函數交換的是實參ij的副本,而不是ij的本身。

1.2 引用形參

引用形參直接關聯到其綁定的對象,而並非這些對象的副本。每次調用函數時,引用形參被創建並與相應實參關聯。如果將swap()函數的參數修改為引用形參

void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
則調用swap 函數的示意圖如圖 2 所示。

 

 

 從圖2中可以看到,swap()函數交換的是實參ij的本身。

2 數組形參

當要使用數組作為函數形參時,因為一個數組不能使用另外一個數組初始化,也不能將一個數組賦值給另外一個數組,而在1.1非引用形參”中提到要用實參的副本來初始化形參,所以實參為數組時,不能直接傳遞給形參。

那么,如果一個函數需要數組作為其參數,這個函數該如何定義呢?

2.1 參數為數組的函數

例如一個函數的作用是找出數組中的最大數,數組為該函數的參數,則可以用如下三種方式定義該函數:

int FindMax(int* array);
int FindMax(int array[]);
int FindMax(int array[10]);
雖然不能直接傳遞數組,但是函數的形參可以寫成數組的形式。此時,調用該函數是的實參數組被編譯器自動轉換為指針,也就是說,以上三種定義是等價的,其參數類型都是int*

調用該函數時,直接將數組名稱作為實參即可。

int array_my[5] = {1, 2, 3, 4, 5};
int array_maxvalue = FindMax(array_my);
2.2 參數為數組引用的函數

如果函數的形參時數組的引用,則編譯器不會把數組實參轉換為指針,而是傳遞數組的引用本身。

其定義方式為

int FindMax(int(&array)[5]);

調用該函數的方法與2.1 參數為數組的函數”中的方法相同。

需要注意的時,調用參數為數組引用的函數時,編譯器檢查實參的大小與形參的大小是否匹配。

int FindMax(int(&array)[5]);
時,調用該函數的形參必須是有5 個元素的整形數組的數組名,以下調用方式是錯誤的。

int array_my[3] = {1, 2, 3};
int array_maxvalue = FindMax(array_my);
而對於參數為數組的函數

int FindMax(int array[10]);
則沒有要求形參和實參的數組元素個數必須對應,以下方式調用則是正確的。

int array_my[3] = {1, 2, 3};
int array_maxvalue = FindMax(array_my);



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com