Ошибка компиляции Cannot convert "int**" to "int*", "int*" to "int" - C (СИ)

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

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

Здравствуйте, есть код. Выдает 2 ошибки: Cannot convert "int**" to "int*" Cannot convert "int*" to "int" Выделение памяти вроде бы правильное, но почему оно выдает ошибки не понятно. Кто может подскажите. Заранее спасибо. Код:
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
#define n 9

int main()
{
  int *A;
  int i, j;
int tmp;
 
  srand(time(NULL));
A=(int**)malloc(sizeof(int*)*n);
for(i=0;i<n;i++){
A[i]=(int*)malloc(sizeof(int)*n);
 }
 
   printf("Ishodnaja matrix:\n\n");
  for(i=0; i<n;i++)
  {
    for(j=0; j<n;j++)
        {
      *(A+i*n+j)=1+rand()%9;
      printf("%d\t",*(A+i*n+j));
        }
   printf("\n");
  }
  printf("\nTrnsponirovannaja matrix:\n\n");
  for(i=0; i<n; i++){
for(j=0;j<n;j++){
 
tmp=*(A+i*n+j);
*(A+i*n+j)=*(A+(n-i-1)*n+j);
*(A+(n-i-1)*n+j)=tmp;}
}
for(i=0; i<n; i++){
for(j=0; j<n;j++){
 printf("%d\t",*(A+i*n+j));
        }
    printf("\n");
free(A);
  }
getch();
  return 0;
}

Решение задачи: «Ошибка компиляции Cannot convert "int**" to "int*", "int*" to "int"»

textual
Листинг программы
*(*(A+i)+j)

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

В данном коде происходит обращение к элементу массива по двойному индексу.

    • указывает на то, что нужно обратиться к значению, а не к ссылке на него. (A+i) - обращение к элементу массива A по индексу i (индекс начинается с 0). (A+i)+j - обращение к элементу массива A по совокупности индексов i и j. Для понимания: если есть массив A, то A[0] будет первым элементом, A[1] - вторым, и так далее. Если мы хотим обратиться к элементу массива по двойному индексу, то сначала мы должны обратиться к элементу массива по первому индексу, а затем по второму. В данном коде это выглядит так: сначала мы обращаемся к элементу массива A по индексу i, затем по полученной ссылке мы обращаемся к элементу этого массива (который является массивом) по индексу j. Ошибка компиляции говорит о том, что некорректно происходит преобразование типов. Вероятно, вместо int* нужно было использовать int.

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


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

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

14   голосов , оценка 4.071 из 5