Как вернуть локальный массив из функции C++?
Здесь мы создадим программу на C++ для возврата локального массива из функции. И встретите правильный способ возврата массива из функции с использованием 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.
Пример: