Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Повернення масивів з функції | Специфікація Значень, Що Повертаються Функцією
Функції C++

Повернення масивів з функції

Свайпніть щоб показати меню

Існує важливе обмеження: тільки динамічні масиви можуть повертатися з функцій. Це обмеження виникає через локальну область видимості функцій; статичні масиви, створені всередині функції, доступні лише в межах цієї функції.

Якщо спробувати повернути масив, створений локально, виникне обмеження через область видимості функції (ви спробуєте повернути адресу неіснуючих змінних, що призведе до помилки).

Повернення динамічного масиву

На відміну від локальних змінних, які видаляються після завершення роботи функції, динамічна пам'ять, виділена за допомогою new[], дозволяє даним існувати після виходу з функції, в якій вони були створені. У результаті ми можемо отримати доступ до змінних, створених у функції, за їхніми адресами.

Щоб повернути динамічний масив, необхідно використовувати такі специфікатори типу у сигнатурі функції:

  • dataType* для одномірного масиву.
  • dataType** для двовимірного масиву.
main.cpp

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

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** для повернення двовимірного масиву.

question mark

Яке твердження щодо повернення масивів з функцій є правильним?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 3. Розділ 2
some-alt