Как вернуть локальный массив из функции C++?

Опубликовано: 11 Января, 2023

Здесь мы создадим программу на C++ для возврата локального массива из функции. И встретите правильный способ возврата массива из функции с использованием 3 подходов, т.е.

  1. Использование динамически размещаемого массива
  2. Использование статического массива
  3. Использование структуры

Предупреждение:

In function "int* fun()":
6:8: warning: address of local variable "arr" returned [-Wreturn-local-addr]
    int arr[100];
        ^

Вышеуказанная программа НЕПРАВИЛЬНА . Он может выдавать значения 10 или 20 в качестве вывода, может выдавать мусорные значения или может привести к сбою. Проблема в том, что мы возвращаем адрес локальной переменной, что не рекомендуется, поскольку локальные переменные могут не существовать в памяти после завершения вызова функции .

Ниже приведены некоторые правильные способы возврата массива.

1. Использование динамически размещаемого массива

Динамически выделенная память (выделенная с помощью new или malloc()) остается там до тех пор, пока мы не удалим ее с помощью функции удаления или free(). Таким образом, мы можем создать динамически выделяемый массив и удалить его, как только выйдем из функции.

Пример:

2. Использование статического массива

Время жизни статической переменной находится во всей программе. Таким образом, мы всегда можем создать локальный статический массив и вернуть его.

Пример:

3. Использование структуры

Мы можем обернуть массив в структуру/класс и вернуть экземпляр структуры/класса. Причина этой работы в том, что массив членов структур глубоко скопирован. В приведенной ниже программе глубокое копирование происходит, когда возвращаемый нами экземпляр копируется в main.

Пример:

C++