将void **转换为int – C的二维数组

我试图将一个void **指针投射到C中的一个int ** 2D数组

这里是我正在尝试使用的代码(删除所有多余的位):

\*assume that i have a data structure called graph with some *element "void** graph" in it and some element "int order" */ void initialise_graph_data(graph_t *graph) { void **graph_data = NULL; int (*matrix)[graph->order]; size_t size = (graph->order * graph->order) * sizeof(int); graph_data = safe_malloc(size); /*safe malloc works fine*/ matrix = (int(*)[graph->order])graph_data; graph->graph = graph_data; } 

当我编译,它工作正常,但给我一个警告,variables“matrix”设置,但没有使用。 我真的不想要使用临时matrixvariables,因为该函数只是初始化数组,而不是放入任何东西; 但是如果我尝试直接将graph_data投射到int **时,我将它指定为graph-> graph,如下所示:

 graph->graph = (int(*)[graph->order])graph_data; 

它给了我一个不兼容的指针types警告的任务。

我只是没有正确的施放? 有没有人有任何build议,如何我可以使其工作没有临时“matrix”variables? 或者如果不是的话,我可以用这个variables做些什么,这样它就不会给我警告,说它已经被设置但是没有被使用?

谢谢

编译器是正确的,一个数组数组(或一个指向数组的指针)与指向指针的指针是不一样的。 想一想如何在记忆中进行布局:

一个大小为MxN的matrix,其forms为数组:

 + -------------- -------------- + + ----- + ------------- --- + -------------- + ----- + ------------------ +
 | matrix[0] [0] | matrix[0] [1] |  ... | matrix[0] [N-1] | matrix[1] [0] |  ... | matrix[M-1] [N-1] |
 + -------------- -------------- + + ----- + ------------- --- + -------------- + ----- + ------------------ +

A和指针指针forms的相同“matrix”:

 + ----------- ----------- + + ----------- + ----- +
 | matrix[0] | matrix[1] | matrix[2] |  ... |
 + ----------- ----------- + + ----------- + ----- +
   |  |  |
   |  |  V
   |  |  + -------------- -------------- + + ----- +
   |  |  | matrix[2] [0] | matrix[2] [1] |  ... |
   |  |  + -------------- -------------- + + ----- +
   |  |
   |  V
   |  + -------------- -------------- + + ----- +
   |  | matrix[1] [0] | matrix[1] [1] |  ... |
   |  + -------------- -------------- + + ----- +
   |
   V
   + -------------- -------------- + + ----- +
   | matrix[0] [0] | matrix[0] [1] |  ... |
   + -------------- -------------- + + ----- +

分配正确的大小并不重要,这两个variables是不兼容的,这是你的编译器告诉你的。