С++ Почему ошибка при передачи указателя на двумерный массив в функцию?

128
06 июня 2019, 23:30

Нужно передать в функцию указатель на двумерный массив. Сделал это, как было предложено в одном из ответов вот тут. Но компилятор выдает ошибку. Почему?

    #include <cstdlib> // для system
    #include <math.h>  // математические функции. 
    #include <stdio.h> // стандартные функции ввода-вывода;
    using namespace std;
    void search_(int *A, int n, int m)
    {
       int i, MiN = 0, MiM = 0;
       int Mi = 0;
       cout << "Поиск элементов" << endl;
        for(int i=0; i<m; i++){
            for(int j=i;j<m;j++) {
                 if((A[i][j]<Mi)&&!(i==j)){ // Поиск минимального элемента в матрице
                    Mi = A[i][j];    
                    MiN = i;
                    MiM = j;
                    cout << A[i][j] << "[" << i << "]" << "[" << j << "]" << "\t\t";
                 }
            }
         cout << endl;
        }     
    }
    int main() 
    {     
        int n = 5, m = 5;    // n, m – размеры массива
        int **A;
        A = new int *[n];    // Захват памяти под указатели
        for(i=0; i<n; i++) 
            A[i] = new int [m];    // и под элементы    
        Mi = A[0][0];
        srand(time(NULL)); // Необходимо для генерации случайных чисел
        for (int i = 0; i < n; i++) // Вывод матрицы
        {
            for (int j = 0; j < m; j++) {
               A[i][j] = rand() % 41 - 20; // Заполнение матрицы  
               cout << A[i][j] << "[" << i << "]" << "[" << j << "]" << "\t\t";
            }
        cout << endl;
        }
        A = search_((int*) A, n, m);
        cout << "Минимальный элемент " << Mi << "[" << MiN << "]" << "[" << MiM << "]" << endl; // Вывод найденного минимального элемента
        for(int i=0; i<n; i++)  
            delete []A[i];    // Освобождение памяти
        delete []A;
        return 0;
    }

Ошибка:

In function 'void search_(int*, int, int)': Line 14: error: invalid types 'int[int]' for array subscript compilation terminated due to -Wfatal-errors.

Answer 1

Ну, если уж вы делаете реальный int**

    A = new int *[n];
    for(i=0; i<n; i++) 
        A[i] = new int [m];    // и под элементы    

то и функцию делайте соответствующую:

void search_(int **A, int n, int m)
READ ALSO
Почему выдаёт ошибку и как её исправить?

Почему выдаёт ошибку и как её исправить?

Почему выдаёт ошибку и как её исправить?

111
Переименование окна другой программы SendMessege

Переименование окна другой программы SendMessege

Нужно, чтобы программа переименовывала окно второй программыУкажите пожалуйста на ошибку:

140
Проблема с выводом в файл

Проблема с выводом в файл

У меня 2 вопроса:

121
Как реализовать вектор на одном указателе?

Как реализовать вектор на одном указателе?

На трех указателях ясно, но ни как не могу придумать как реализовать вектор на одном указателе, не задействовав для хранение оставшихся двух...

140