Передача двумерного массива в функцию в C++: указатели, ссылки и векторы

Чтобы передать 2D-массив функции в C++, вы можете использовать следующие методы:

Метод 1: использование указателей
Вы можете передать 2D-массив в функцию, используя указатель на первый элемент массива. Затем функция может получить доступ к элементам массива, используя арифметику указателей. Вот пример:

void myFunction(int* arr, int rows, int cols) {
    // Access array elements using pointer arithmetic
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            int element = *(arr + i * cols + j);
            // Do something with the element
        }
    }
}
int main() {
    int myArray[3][4] = {{1, 2, 3, 4},
                         {5, 6, 7, 8},
                         {9, 10, 11, 12}};
    int rows = 3;
    int cols = 4;
    // Pass the array to the function
    myFunction(&myArray[0][0], rows, cols);
    return 0;
}

Метод 2: использование ссылок
В качестве альтернативы вы можете передать 2D-массив в функцию, используя ссылки. Это позволяет работать с массивом напрямую, без необходимости арифметики указателей. Вот пример:

void myFunction(int (&arr)[3][4]) {
    // Access array elements directly
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            int element = arr[i][j];
            // Do something with the element
        }
    }
}
int main() {
    int myArray[3][4] = {{1, 2, 3, 4},
                         {5, 6, 7, 8},
                         {9, 10, 11, 12}};
    // Pass the array to the function
    myFunction(myArray);
    return 0;
}

Метод 3: использование векторов
Вы также можете использовать векторы для представления двумерного массива и передачи его в функцию. Векторы обеспечивают большую гибкость и динамическое определение размера по сравнению со встроенными массивами. Вот пример:

#include <vector>
void myFunction(const std::vector<std::vector<int>>& arr) {
    // Access array elements using indices
    for (size_t i = 0; i < arr.size(); i++) {
        for (size_t j = 0; j < arr[i].size(); j++) {
            int element = arr[i][j];
            // Do something with the element
        }
    }
}
int main() {
    std::vector<std::vector<int>> myArray = {{1, 2, 3, 4},
                                             {5, 6, 7, 8},
                                             {9, 10, 11, 12}};
    // Pass the vector to the function
    myFunction(myArray);
    return 0;
}

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