在本文中,您將學習將數(shù)組傳遞給C ++中的函數(shù)。您將學習如何傳遞一維和多維數(shù)組。
數(shù)組可以作為參數(shù)傳遞給函數(shù)。也可以從函數(shù)返回數(shù)組??紤]以下示例,將一維數(shù)組傳遞給函數(shù):
C ++程序通過將一維數(shù)組傳遞給函數(shù)來顯示5個學生的分數(shù)。
#include <iostream> using namespace std; void display(int marks[5]); int main() { int marks[5] = {88, 76, 90, 61, 69}; display(marks); return 0; } void display(int m[5]) { cout << "顯示分數(shù): "<< endl; for (int i = 0; i < 5; ++i) { cout << "Student "<< i + 1 <<": "<< m[i] << endl; } }
輸出結(jié)果
顯示分數(shù): Student 1: 88 Student 2: 76 Student 3: 90 Student 4: 61 Student 5: 69
將數(shù)組作為參數(shù)傳遞給函數(shù)時,僅將數(shù)組名稱用作參數(shù)。
display(marks);
還要注意將數(shù)組作為參數(shù)與變量傳遞時的區(qū)別。
void display(int m[5]);
上面代碼中的參數(shù)marks表示數(shù)組marks[5]的第一個元素的內(nèi)存地址。
函數(shù)聲明中的形式參數(shù)int m [5]轉(zhuǎn)換為int * m;。 該指針指向由數(shù)組marks指向的相同地址。
這就是原因,盡管該函數(shù)是在用戶定義的函數(shù)中使用不同的數(shù)組名稱m[5]進行操作,但是原始數(shù)組仍在marks進行操作。
C ++以這種方式處理將數(shù)組傳遞給函數(shù)以節(jié)省內(nèi)存和時間。
多維數(shù)組可以通過與一維數(shù)組相似的方式傳遞。考慮以下示例,將二維數(shù)組傳遞給函數(shù):
C ++程序通過將二維數(shù)組的元素傳遞給函數(shù)來顯示它。
#include <iostream> using namespace std; void display(int n[3][2]); int main() { int num[3][2] = { {3, 4}, {9, 5}, {7, 1} }; display(num); return 0; } void display(int n[3][2]) { cout << "顯示值: " << endl; for(int i = 0; i < 3; ++i) { for(int j = 0; j < 2; ++j) { cout << n[i][j] << " "; } } }
輸出結(jié)果
顯示值: 3 4 9 5 7 1
在上面的程序中,多維數(shù)組num被傳遞給函數(shù)display()。
在display()函數(shù)內(nèi)部,使用嵌套的for循環(huán)遍歷數(shù)組n(num)。
該程序使用2個for循環(huán)遍歷二維數(shù)組中的元素。如果是一個三維數(shù)組,那么應該使用3 for循環(huán)。
最后,所有元素都被打印到屏幕上。
注意: 維度大于2的多維數(shù)組可以以類似于二維數(shù)組的方式傳遞。
C++ 不允許返回一個完整的數(shù)組作為函數(shù)的參數(shù)。但是,您可以通過指定不帶索引的數(shù)組名來返回一個指向數(shù)組的指針。
如果您想要從函數(shù)返回一個一維數(shù)組,您必須聲明一個返回指針的函數(shù),如下:
int * myFunction() { . . . }
另外,C++ 不支持在函數(shù)外返回局部變量的地址,除非定義局部變量為 static 變量。
現(xiàn)在,讓我們來看下面的函數(shù),它會生成 10 個隨機數(shù),并使用數(shù)組來返回它們,具體如下:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; // 要生成和返回隨機數(shù)的函數(shù) int * getRandom( ) { static int r[8]; // 設(shè)置種子 srand( (unsigned)time( NULL ) ); for (int i = 0; i < 8; ++i) { r[i] = rand(); cout << r[i] << endl; } return r; } // 要調(diào)用上面定義函數(shù)的主函數(shù) int main () { // 一個指向整數(shù)的指針 int *p; p = getRandom(); for ( int i = 0; i < 8; i++ ) { cout << "*(p + " << i << ") : "; cout << *(p + i) << endl; } return 0; }
當上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:
30737 23110 21765 14820 8295 12330 28395 191 *(p + 0) : 30737 *(p + 1) : 23110 *(p + 2) : 21765 *(p + 3) : 14820 *(p + 4) : 8295 *(p + 5) : 12330 *(p + 6) : 28395 *(p + 7) : 191