標籤:clu pre 解釋 使用 其他 一個 有一個 數組指標 ons
函數中,數組如何傳參?
整個數組傳過去是不可以的。自然聯想到指標和引用。
- 因為數組指標本質上就是多重指標,所以以下三種傳參方式都是可以的:
void print(const int*);void print(const int[]); //優點:可以看出函數意圖void print(const int[10]); //優點:“10”代表了我們的期望維度,但因為int[10]本質上是int*,所以與前兩種實際上是一樣的。
const修飾符是可加可不加的。當我們可能會一不小心時,最好加上。
- 當然啦,也可以用引用傳參。但是其一般有一個局限性:限定了數組長度。
為什麼呢?我認為是引用必須綁定一個實體。
#include <iostream>using namespace std;void print(int (&arr)[]){ //報錯,應在[]內加上數字 for (auto elem:arr){ cout << elem << endl; }}void ass(int ia[], int len){ for (int i = 0; i < len; i++){ *ia++ = i; }}int main(){ int a1[10], a2[20]; ass(a1, 10); ass(a2, 20); print(a1); print(a2); return 0;}
明確一個概念:在c++語言中其實沒有真正的多維陣列。所謂多維陣列其實是數組的數組。
void print(int matrix[][10], int rowsize)
或者:
void print(int (*matrix)[10], int rowsize)
不能漏掉第一維以後的數組維度!!!為什麼呢?不是在前面說int[]就等於int*嗎?
解釋是:如果不知道其他維度,在使用諸如array[n][m]時,編譯器就無法正常定址。因為int的值是固定的,所以省略掉沒有什麼關係。
今天就整理到這裡。
c++ 函數(1)