我有一个存储在void**
指针中的动态二维数组,我只是想知道我应该如何转换/取消引用这些值以便可以打印它们?
这是我正在尝试做的一个例子:
/* Assume that I have a data structure called graph with some
* element "void** graph" in it and some element "int order" */
void foo(graph_t *graph)
{
int **matrix;
/*safe malloc works fine, it uses calloc to initialise it all to zeroes*/
matrix = safe_malloc(graph->order * sizeof(int*));
for (i = 0; i < graph->order; i++)
matrix[i] = safe_malloc(graph->order * sizeof(int));
/* storing matrix in the data structure */
matrix = (int**)graph->graph;
printf("%d\n", (int)graph->graph[2][2]);
}
当我尝试编译它时,编译器给了我警告:“取消引用'void *'指针”和错误:“无效使用无效表达式”。
我应该怎么做才能转换void**
指针以便我可以从中打印元素graph->graph
?
编辑:
感谢大家的帮助;我无法制作 int** 类型的 graph->graph,因为它需要保存多种类型的数据,我唯一在实现时遇到问题的是 int** 数组。
我将 matrix = (int* )graph->graph 更改为 graph->graph = (void *)matrix 并且效果很好,我可以打印数组的元素,但是现在如果我实现一个单独的函数:
void print_foo(graph_t *graph)
{
int i,j;
for (i = 0; i < graph->order; i++)
{
for(j = 0; j < graph->order; j++)
{
printf("%d ", ((int**)graph->graph)[i][j]);
}
putchar('\n');
}
}
它只是给了我一个分段错误,但是如果我在原始 foo(graph_t *graph) 中运行该代码块,它会很好地打印二维数组。
有人可以解释一下 graph->graph 发生了什么,这样如果我从不同的函数调用它就不会打印