Повернення масивів з функції
Свайпніть щоб показати меню
Існує важливе обмеження: тільки динамічні масиви можуть повертатися з функцій. Це обмеження виникає через локальну область видимості функцій; статичні масиви, створені всередині функції, доступні лише в межах цієї функції.
Якщо спробувати повернути масив, створений локально, виникне обмеження через область видимості функції (ви спробуєте повернути адресу неіснуючих змінних, що призведе до помилки).
Повернення динамічного масиву
На відміну від локальних змінних, які видаляються після завершення роботи функції, динамічна пам'ять, виділена за допомогою new[], дозволяє даним існувати після виходу з функції, в якій вони були створені. У результаті ми можемо отримати доступ до змінних, створених у функції, за їхніми адресами.
Щоб повернути динамічний масив, необхідно використовувати такі специфікатори типу у сигнатурі функції:
dataType*для одномірного масиву.dataType**для двовимірного масиву.
main.cpp
12345678910111213141516171819#include <iostream> // Function to create and return a dynamic 1D array int* createArray(const int size) { int* arr = new int[size]; for (int i = 0; i < size; ++i) arr[i] = i + 1; // Example initialization return arr; } int main() { int size = 5; int* myArray = createArray(size); // Don't forget to delete the dynamically allocated memory delete[] myArray; }
Функція динамічно виділяє пам'ять для цілочисельного масиву заданого розміру. Вона ініціалізує елементи масиву значеннями від 1 до size масиву. Функція повертає вказівник на перший елемент динамічно виділеного цілочисельного масиву, який тепер можна використовувати в блоці main().
main.cpp
1234567891011121314151617181920212223242526272829303132333435#include <iostream> // Function to create and return a dynamic 2D array int** createArray(const int rows, const int cols) { int** arr = new int*[rows]; for (int i = 0; i < rows; ++i) { arr[i] = new int[cols]; for (int j = 0; j < cols; ++j) { arr[i][j] = i * cols + j + 1; // Example initialization } } return arr; } int main() { int rows = 3; int cols = 2; int** myArray = createArray(rows, cols); // Use the returned 2D array for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { std::cout << myArray[i][j] << " "; } std::cout << std::endl; } // Don't forget to delete the dynamically allocated memory for (int i = 0; i < rows; ++i) { delete[] myArray[i]; } delete[] myArray; return 0; }
Принцип такий самий, як і при поверненні одновимірного масиву: єдина відмінність полягає в тому, що потрібно повернути вказівник на масив вказівників з використанням типу int** для повернення двовимірного масиву.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат