Ошибка в переменных: Невозможно преобразовать "void *" в "int **" - C (СИ)
Формулировка задачи:
после компиляции выдает ошибку: error C2440: =: невозможно преобразовать "void *" в "int **"
1> Для преобразования "void*" к указателю на тип, не являющемуся "void", требуется явное приведение
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <time.h> int main (int argc, char **argv) { int i, j, el, m, k, kol= 0, w, last, first, mid, row, col, **ar; srand (time (0)); printf ("row col> "); scanf ("%d%d", &row, &col); printf ("\n-----\nMatrix:\n"); ar= malloc (sizeof (int *) * row); for (i= 0; i < row; i++) { ar[i]= malloc (sizeof (int) * col); for (j= 0; j < col; j++) { ar[i][j]= rand () % 99; printf ("%2d ", ar[i][j]); } printf ("\n"); } // Sorting by selection for (j= 0; j < col; j++) for (m= 0; m < row - 1; m++) for (i= m + 1; i < row; i++) { if (ar[i][j] < ar[m][j]) { w= ar[m][j]; ar[m][j]= ar[i][j]; ar[i][j]= w; } } printf("\n-----\nSorting by selection:\n"); for (i= 0; i < row; i++) { for (j= 0; j < col; j++) printf ("%2d ", ar[i][j]); printf("\n"); } printf ("\nFind elemet: "); scanf ("%d", &el); // Consecutive search printf("\n-----\nConsecutive search:\n"); for (j= 1; j < col; j+=2) { for (i= 0; i < row; i++) { if (ar[i][j] == el) { kol++; printf("col %2d in row %2d\n", j + 1, i + 1); } } } if (kol == 0) printf("Not found\n"); // Binary search printf ("\nBinary search:\n"); for (j= 0; j < col; j+= 2) { first= 0; last= row - 1; while (first <= last) { mid= (first + last) / 2; if (ar[mid][j] < el) first= mid + 1; else if (ar[mid][j] > el) last= mid - 1; else { kol++; int buf= mid; while (buf > 0 && ar[--buf][j] == el); while (++buf < row && ar[buf][j] == el) printf ("col %2d in row %2d\n", j + 1, buf + 1); break; } } } if (kol == 0) printf("Not found\n"); return 0; }
Решение задачи: «Ошибка в переменных: Невозможно преобразовать "void *" в "int **"»
textual
Листинг программы
ar= (int **)malloc (sizeof (int *) * row);
Объяснение кода листинга программы
В данном коде происходит выделение памяти под массив указателей на int.
row
- это переменная, которая содержит количество строк в массиве.ar
- это переменная, которая будет содержать указатели на начало каждой строки массива. Выполняется следующие действия:- Вычисляется размер памяти, необходимый для хранения row указателей на int. Это делается с помощью оператора sizeof, который возвращает размер памяти, занимаемый типом данных int *.
- Используя функцию malloc, выделяется память под массив указателей на int. При этом в качестве аргумента функции передается размер памяти, который был вычислен на предыдущем шаге.
- Результат работы функции malloc сохраняется в переменной
ar
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д