Ошибка в переменных: Невозможно преобразовать "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.

  1. row - это переменная, которая содержит количество строк в массиве.
  2. ar - это переменная, которая будет содержать указатели на начало каждой строки массива. Выполняется следующие действия:
  3. Вычисляется размер памяти, необходимый для хранения row указателей на int. Это делается с помощью оператора sizeof, который возвращает размер памяти, занимаемый типом данных int *.
  4. Используя функцию malloc, выделяется память под массив указателей на int. При этом в качестве аргумента функции передается размер памяти, который был вычислен на предыдущем шаге.
  5. Результат работы функции malloc сохраняется в переменной ar.

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


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

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

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