Ошибка компиляции 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д