Динамические матрицы (указатели на указатели) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Никак не могу осознать указатели на указатели. Вот есть объявление
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];
}
Пишет cannot convert double* to double in assignment во 2-ой и 4-ой строчках. И ещё вопросик
const int EPS=0.00001;
Ругается и пишет warning: converting to 'int' from 'double'

Решение задачи: «Динамические матрицы (указатели на указатели)»

textual
Листинг программы
a[i] === *(a+i)
a[i][j] ===  *(*(a+i)+j)

Объяснение кода листинга программы

  1. Объявление матрицы a типа указатель на указатель типа int: int **a;
  2. Указатель a инициализируется значением, указывающим на начало памяти, выделенной под матрицу: a = (int *) malloc(m sizeof(int *));
  3. Для каждого i-го элемента матрицы (от 0 до m-1) выполняется: a[i] = (int ) malloc(n sizeof(int)); Если выделение памяти под i-й элемент матрицы не удалось, то программа выведет сообщение об ошибке и завершит свое выполнение.
  4. Указатель a используется в качестве базового адреса для выделения памяти под i-й элемент матрицы: a[i] = (int *) (a + i);
  5. Значение a[i][j] можно получить, используя формулу: a[i][j] = ((a+i)+j);
  6. Если требуется изменить значение a[i][j], то необходимо изменить значение указателя a[i][j], используя формулу: ((a+i)+j) = новое_значение;
  7. Для освобождения памяти, выделенной под матрицу, используется функция free(): free(a);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы