Нужно передать в функцию указатель на двумерный массив. Сделал это, как было предложено в одном из ответов вот тут. Но компилятор выдает ошибку. Почему?
#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.
Ну, если уж вы делаете реальный int**
A = new int *[n];
for(i=0; i<n; i++)
A[i] = new int [m]; // и под элементы
то и функцию делайте соответствующую:
void search_(int **A, int n, int m)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно, чтобы программа переименовывала окно второй программыУкажите пожалуйста на ошибку:
На трех указателях ясно, но ни как не могу придумать как реализовать вектор на одном указателе, не задействовав для хранение оставшихся двух...