я пытаюсь бросить пустоту ** указатель на Int ** 2D массива в Cлитье аннулируются ** в 2D массив Int - C
вот код, который я пытаюсь работать (с все посторонние биты удалены):
\*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;
}
, когда я скомпилировать, что она отлично работает, но дает мне предупреждение, что переменная «матрица» устанавливается, но не используется. я действительно не хочу использовать промежуточную матричную переменную, потому что функция просто должна инициализировать массив, а не помещать в нее что-либо; но если я пытаюсь бросить graph_data непосредственно к междунар **, когда я assiging его graph-> график так:
graph->graph = (int(*)[graph->order])graph_data;
это дает мне задание от предупреждения несовместимого типа указателя.
Я просто не правильно его отбрасываю? есть ли какие-либо предложения относительно того, как я могу заставить его работать без промежуточной «матричной» переменной? или, если нет, что я могу сделать с этой переменной, чтобы она не давала мне предупреждения о том, что она установлена, но не используется?
благодаря
См. Также [Кастинг от 'void **' до 'int' в C] (http://stackoverflow.com/questions/18456944/casting-from-void-to-int-c). –