English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本文中,您将学习将数组传递给C ++中的函数。您将学习如何传递一维和多维数组。
数组可以作为参数传递给函数。也可以从函数返回数组。考虑以下示例,将一维数组传递给函数:
C ++程序通过将一维数组传递给函数来显示5个学生的分数。
#include <iostream> using namespace std; void display(int marks[5]); int main() { int marks[5] = {88, 76, 90, 61, 69}; display(marks); ترeturnُ 0; } void display(int m[5]) { cout << "显示分数: "<< endl; for (int i = 0; i < 5; ++i) { cout << "Student "<< i + 1 <<": "<< m[i] << endl; } }
نتائج الإخراج
显示分数: Student 1: 88 Student 2: 76 Student 3: 90 Student 4: 61 Student 5: 69
将数组作为参数传递给函数时,仅将数组名称用作参数。
display(marks);
还要注意将数组作为参数与变量传递时的区别。
void display(int m[5]);
上面代码中的参数marks表示数组marks[5]的第一个元素的内存地址。
函数声明中的形式参数int m [5]转换为int * m;。 该指针指向由数组marks指向的相同地址。
这就是原因,尽管该函数是在用户定义的函数中使用不同的数组名称m[5]进行操作,但是原始数组仍在marks进行操作。
C ++以这种方式处理将数组传递给函数以节省内存和时间。
多维数组可以通过与一维数组相似的方式传递。考虑以下示例,将二维数组传递给函数:
C ++程序通过将二维数组的元素传递给函数来显示它。
#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); ترeturnُ 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] << " "; } } }
نتائج الإخراج
عرض القيمة: 3 4 9 5 7 1
في البرنامج المذكور أعلاه، يتم نقل مجموعة متعددة الأبعاد num إلى دالة display().
في داخل دالة display()، يستخدم الدوران المدمج لدوران مجموعة n (num).
يستخدم هذا البرنامج 2لدوراناستكشاف عناصر مجموعة ثنائية الأبعاد. إذا كان لديك مجموعة ثلاثية الأبعاد، يجب استخدامه 3 for 循ح
في النهاية، يتم طباعة جميع العناصر على الشاشة.
ملاحظة: يمكن نقل الأبعاد أكبر من 2的多维数组 بطرق مشابهة لسلسلة الأبعاد الثنائية.
لا يسمح C++ بالعودة إلى مجموعة كاملة كمعامل للدالة. ولكن يمكنك العودة إلى سهم مجموعة غير محددة الأبعاد.
إذا كنت ترغب في العودة إلى الدالة مجموعة مكانة أحادية الأبعاد، يجب أن تعلن دالة العودة إلى السهم الدالة، مثلما يلي:
int *myFunction() { . . . }
إلى جانب ذلك، لا يدعم C++ العودة إلى عنوان المتغير المحلي خارج الدالة، إلا إذا تم تعريف المتغير المحلي كـ ثابت المتغيرات.
الآن، دعونا ننظر إلى الدالة التالية، التي تُنتج 10 أرقام عشوائية ونستخدم مجموعة لتحويلها، مثلما يلي:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; // -the function to generate and return random numbers int *getRandom() { static int r[8]; // -set the seed srand((unsigned)time(NULL)); for (int i = 0; i < 8; ++i) { r[i] = rand(); cout << r[i] << endl; } returnُ r; } // -the main function to call the above defined function int main () { // -pointer to an integer int *p; p = getRandom(); for (int i = 0; i < 8; i++) { cout << "*(p + " << i << ") : "; cout << *(p + i) << endl; } ترeturnُ 0; }
عندما يتم تجميع وكتابة الكود أعلاه وتنفيذه، سيتم إنتاج النتيجة التالية:
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