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