Динамические матрицы (указатели на указатели) - C (СИ)
Формулировка задачи:
Никак не могу осознать указатели на указатели.
Вот есть объявление
Потом следует
Далее понятие строки используется для понятности.
Т.е. просто А это указатель на начала строк, а *А это указатель на элемент внутри строки?
Т.е. ++А это переход к новой строке , а ++*А это переход к следующему элементу строки?
В многомерных случаях *******А, получается, А это самый верхний уровень, потом ниже и т.д.?
У меня вылезает ошибка в
Пишет cannot convert double* to double in assignment во 2-ой и 4-ой строчках.
И ещё вопросик
Ругается и пишет
warning: converting to 'int' from 'double'
double **A;
A=new double[m]; for (int i=0;i<m;++i){ *A[i]=new double[n]; }
double **A_; A_=new double[m+2]; for (int i=0;i<m+2;++i){ *A_[i]=new double[n]; }
const int EPS=0.00001;
Решение задачи: «Динамические матрицы (указатели на указатели)»
textual
Листинг программы
a[i] === *(a+i) a[i][j] === *(*(a+i)+j)
Объяснение кода листинга программы
- Объявление матрицы
a
типа указатель на указатель типа int: int **a; - Указатель
a
инициализируется значением, указывающим на начало памяти, выделенной под матрицу: a = (int *) malloc(m sizeof(int *)); - Для каждого i-го элемента матрицы (от 0 до m-1) выполняется: a[i] = (int ) malloc(n sizeof(int)); Если выделение памяти под i-й элемент матрицы не удалось, то программа выведет сообщение об ошибке и завершит свое выполнение.
- Указатель
a
используется в качестве базового адреса для выделения памяти под i-й элемент матрицы: a[i] = (int *) (a + i); - Значение a[i][j] можно получить, используя формулу: a[i][j] = ((a+i)+j);
- Если требуется изменить значение a[i][j], то необходимо изменить значение указателя a[i][j], используя формулу: ((a+i)+j) = новое_значение;
- Для освобождения памяти, выделенной под матрицу, используется функция free(): free(a);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д