C++ возвращает 2D-массив из функции

Строка для двойного преобразования C++ (String to double) Программирование и разработка

Массив — это набор данных подобного типа, хранящихся в непрерывной памяти. И когда мы храним массив внутри массива, он называется 2D-массивом или 2-мерным массивом. Чтобы узнать больше о массивах, обратитесь к статье Массивы в C++.

Массив — это набор данных подобного типа, хранящихся

Когда есть необходимость вернуть 2D-массив из функции, всегда трудно найти способ сделать это, и причина, по которой это сложно, заключается в том, что когда мы возвращаем массив, локальный для некоторой функции, он возвращает только адрес этого массива. и как только функция возвращает адрес завершена, и мы достигли места, где мы ее вызвали. Затем операционная система уничтожит всю память, которая была создана в этой функции, поэтому в этом случае массив, который мы получаем из этого, также уничтожается, и мы сохраняем адрес недопустимой области памяти.

Итак, в этой статье мы увидим, как справиться с этой проблемой.

Методы возврата 2D-массива из функции

здесь мы увидим возврат 2D-массива из функции с использованием следующих методов:

  • Использование динамического массива
  • Использование статического ключевого слова
  • Использование техники Struct

1. Возврат 2D-массива из функции в C++ с использованием динамического массива

Динамический массив помогает нам хранить адреса массивов с помощью указателя. Таким образом, мы можем использовать динамический массив для использования нотации указателя на указатель для динамического выделения и возврата массива. Чтобы узнать больше о динамическом массиве, обратитесь к Динамический массив в C++.

Ниже приведена реализация вышеуказанного подхода

С++

// C++ code for returning 2D array
// from function using Dynamic array
#include <iostream>
using namespace std;
const int N = 3;
// function to display array
void printArray(int** arr)
{
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            cout << arr[i][j]<<" ";
        }
        cout << endl;
    }
}
// function to initialize and returning array
int** getArray()
{
    int** arr = new int*[N];
    for (int i = 0; i < N; ++i) {
        arr[i] = new int[N];
        for (int j = 0; j < N; ++j) {
            arr[i][j] = i + j;
        }
    }
    return arr;
}
// Driver Code
int main()
{
    int** arr;
    arr = getArray();
    printArray(arr);
    return 0;
}

Вывод

0 1 2

1 2 3

2 3 4

2. Возврат 2D-массива из функции в C++ с использованием статического ключевого слова

Ключевое слово static используется, чтобы сделать память элемента статической, что означает, что даже когда он передается функции, он использует тот же элемент памяти, а не создает копию элемента. Чтобы узнать больше о статических ключевых словах, обратитесь к ключевому слову static в C++.

Читайте также:  Как использовать Python Csv Dictreader?

Ниже приведена реализация вышеуказанного подхода

С++

// C++ code for returning 2D array
// from function using static keyword
#include <iostream>
using namespace std;
const int N = 3;
// function for display array
void printArray(int arr[][N])
{
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            cout << arr[i][j]<<" ";
        }
        cout << endl;
    }
}
// function to initialize and returning array
int (*(getArray)())[N]
{
    static int arr[N][N]
        = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } };
    return arr;
}
// Driver code
int main()
{
    int(*arr)[N];
    arr = getArray();
    printArray(arr);
    return 0;
}

Вывод

0 1 2 
3 4 5 
6 7 8

3. Возврат 2D-массива из функции в C++ с использованием техники Struct

Struct — это определяемый пользователем тип данных, который может хранить несколько элементов, связанных вместе, и действует как единое целое. Итак, мы можем использовать структуру с массивом внутри как единицу для выполнения любой операции и возвращать ее как единицу.

Ниже приведена реализация вышеуказанного подхода

С++

// C++ code for returning 2D array
// from function using static keyword
#include <iostream>
using namespace std;
const int N = 3;
// structure of array
struct ArrStruct {
    int arr[N][N];
};
// function for display array
void printArray(ArrStruct var)
{
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            cout << var.arr[i][j] << " ";
        }
        cout << endl;
    }
}
// function to initialize and returning array
ArrStruct getArray()
{
    ArrStruct var;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            var.arr[i][j] = i + j;
        }
    }
    return var;
}
// Driver code
int main()
{
    ArrStruct arr;
    arr = getArray();
    printArray(arr);
    return 0;
}

Вывод

0 1 2 
1 2 3 
2 3 4

Оцените статью
bestprogrammer.ru
Добавить комментарий

  1. Марс

    Здравствуйте. В приведенных Вами примерах нет самого главного- ПЕРЕМЕННОЙ N. Ибо если массив динамический, то я должен его сформировать внутри функции и передать головной программе сам массив и его размер. Хватило бы одномерного массива переменной длины, длина которого формировалась бы внутри функции (генератор случайных чисел или чтение из файла). Навскидку не сможете подсказать вариант?

    Ответить