gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:18:30 26 4
gpt4 key购买 nike

我试图在 C 中将一个 void** 指针转换为一个 int** 二维数组

这是我正在尝试使用的代码(删除了所有无关的位):

\*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 分配给 graph->graph 时尝试将 graph_data 直接转换为 int** ,如下所示:

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

它给了我一个来自不兼容指针类型警告的赋值。

我只是没有正确转换它吗?有没有人对我如何在没有临时“矩阵”变量的情况下使其工作有任何建议?或者,如果没有,我可以如何处理该变量,以便它不会给我警告它已设置但未使用?

谢谢

最佳答案

编译器是对的,数组的数组(或指向数组的指针)与指向指针的指针不同。想想它们在内存中的布局:

一个大小为 MxN 的矩阵,形式为数组的数组:

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

一个和指针形式相同的“矩阵”指向指针:

+-----------+-----------+-----------+-----+| 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] | ... |  +--------------+--------------+-----+

分配的大小是否正确并不重要,这两个变量只是不兼容,这是您的编译器告诉您的。

关于将 void** 转换为 int 的二维数组 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36261761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com