Ошибка в переменных: Невозможно преобразовать "void *" в "int **" - C (СИ)

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

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

после компиляции выдает ошибку: error C2440: =: невозможно преобразовать "void *" в "int **" 1> Для преобразования "void*" к указателю на тип, не являющемуся "void", требуется явное приведение
Листинг программы
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. int main (int argc, char **argv)
  6. {
  7. int i, j, el, m, k, kol= 0, w, last, first, mid, row, col, **ar;
  8. srand (time (0));
  9. printf ("row col> ");
  10. scanf ("%d%d", &row, &col);
  11. printf ("\n-----\nMatrix:\n");
  12. ar= malloc (sizeof (int *) * row);
  13. for (i= 0; i < row; i++)
  14. {
  15. ar[i]= malloc (sizeof (int) * col);
  16. for (j= 0; j < col; j++)
  17. {
  18. ar[i][j]= rand () % 99;
  19. printf ("%2d ", ar[i][j]);
  20. }
  21. printf ("\n");
  22. }
  23. // Sorting by selection
  24. for (j= 0; j < col; j++)
  25. for (m= 0; m < row - 1; m++)
  26. for (i= m + 1; i < row; i++)
  27. {
  28. if (ar[i][j] < ar[m][j])
  29. {
  30. w= ar[m][j];
  31. ar[m][j]= ar[i][j];
  32. ar[i][j]= w;
  33. }
  34. }
  35. printf("\n-----\nSorting by selection:\n");
  36. for (i= 0; i < row; i++)
  37. {
  38. for (j= 0; j < col; j++)
  39. printf ("%2d ", ar[i][j]);
  40. printf("\n");
  41. }
  42. printf ("\nFind elemet: ");
  43. scanf ("%d", &el);
  44. // Consecutive search
  45. printf("\n-----\nConsecutive search:\n");
  46. for (j= 1; j < col; j+=2)
  47. {
  48. for (i= 0; i < row; i++)
  49. {
  50. if (ar[i][j] == el)
  51. {
  52. kol++;
  53. printf("col %2d in row %2d\n", j + 1, i + 1);
  54. }
  55. }
  56. }
  57. if (kol == 0)
  58. printf("Not found\n");
  59. // Binary search
  60. printf ("\nBinary search:\n");
  61. for (j= 0; j < col; j+= 2)
  62. {
  63. first= 0;
  64. last= row - 1;
  65. while (first <= last)
  66. {
  67. mid= (first + last) / 2;
  68. if (ar[mid][j] < el)
  69. first= mid + 1;
  70. else if (ar[mid][j] > el)
  71. last= mid - 1;
  72. else
  73. {
  74. kol++;
  75. int buf= mid;
  76. while (buf > 0 && ar[--buf][j] == el);
  77. while (++buf < row && ar[buf][j] == el)
  78. printf ("col %2d in row %2d\n", j + 1, buf + 1);
  79. break;
  80. }
  81. }
  82. }
  83. if (kol == 0)
  84. printf("Not found\n");
  85. return 0;
  86. }

Решение задачи: «Ошибка в переменных: Невозможно преобразовать "void *" в "int **"»

textual
Листинг программы
  1. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы