將數組作為函數參數調用


數組與單個元素一樣,也可以作為參數被函數調用,但其用法與單個元素調用存在不同。

對於單個元素調用,如不使用引用&或者指針,則**在函數中對形參的操作不會反映到實參上**,即實參不會發生改變,具體用法詳見上一篇博客。

而對於數組調用,函數的形參看似是一個新的數組,但並未分配新的內存。因為**數組的名字代表着數組的首地址**。因此**在數組名作函數參數時所進行的傳送只是地址的傳送,也就是說把實參數組的首地址賦予形參數組名。**形參數組名取得該首地址之后,也就等於有了實在的數組。實際上是形參數組和實參數組為同一數組,共同擁有一段內存空間。
![在這里插入圖片描述](https://img-blog.csdnimg.cn/2f5095144de9462784ed9d02ff009acb.gif#pic_center)
因此,形參數組是一個虛擬數組,其數組的地址指向了實參數組。如a[0]與b[0]都指向了同一個地址。**在對形參數組進行操作時,實參數組的值也會相應的發生改變。**

在函數調用數組的方法
1.對於一維數組:

```cpp
void invert(int x[]){
//函數部分
}
int main(){
int a[10];
invert(a);
//主函數調用部分
}
```
注:
1.形參與實參的類型必須一樣,如int對應int。
2.主函數調用invert函數時只需使用實參數組的名字,代表數組的地址。
3.形參數組可以不規定長度,但實參數組會規定長度。

另一種寫法:

```cpp
void invert(int x[10]){
//函數部分
}
int main(){
int a[10];
invert(a);
//主函數調用部分
}
```
可以規定好形參數組的長度。但由於形參數組是虛擬數組,其地址與實參數組的地址對應,故形參數組的長度其實並無太大意義。


```cpp
void invert(int x[110]){
//函數部分
for(register int i=1;i<=100;i++){
x[i]=0;
}
}
int main(){
int a[10];
invert(a);
//主函數調用部分
}
```
若形參數組長度大於實參數組,則可能導致對形參數組的部分操作沒有意義。如上文x[11]到x[100]沒有意義。

若形參數組長度小於實參數組,可能導致部分實參數組未被操作。

但無論長度如何,關鍵都在於對形參數組操作的邊界設置是否合理,如下文的代碼並無問題。

```cpp
void invert(int x[10]){
//函數部分
for(register int i=1;i<=100;i++){
x[i]=0;
}
}
int main(){
int a[100];
invert(a);
//主函數調用部分
}
```
2.對於多維數組:
在函數定義時對形參數組可以**指定每一維的長度,也可省去第一維的長度**。因此,以下寫法都是合法的:

```cpp
void invert(int sum[][110])

void invert(int sum[110][110])
```

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM