将void**转换为int-C的2D数组
我试图将void**指针转换为C中的int**2D数组 以下是我正在尝试使用的代码(删除了所有无关的位): 当我编译它时,它工作得很好,但给了我一个警告,变量“matrix”已设置但未使用。我真的不想使用中间矩阵变量,因为函数只是初始化数组,而不是在数组中放入任何东西;但是,如果我尝试将graph_数据直接转换为int**,当我将其转换为graph->graph时,如下所示:将void**转换为int-C的2D数组,c,casting,multidimensional-array,void-pointers,C,Casting,Multidimensional Array,Void Pointers,我试图将void**指针转换为C中的int**2D数组 以下是我正在尝试使用的代码(删除了所有无关的位): 当我编译它时,它工作得很好,但给了我一个警告,变量“matrix”已设置但未使用。我真的不想使用中间矩阵变量,因为函数只是初始化数组,而不是在数组中放入任何东西;但是,如果我尝试将graph_数据直接转换为int**,当我将其转换为graph->graph时,如下所示: graph->graph = (int(*)[graph->order])graph_data; 它给我一
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] | +--------------+--------------+-----+----------------+--------------+-----+------------------+ +--------------+--------------+-----+----------------+--------------+-----+------------------+ |矩阵[0][0]|矩阵[0][1]|……|矩阵[0][N-1]|矩阵[1][0]|……|矩阵[M-1][N-1]| +--------------+--------------+-----+----------------+--------------+-----+------------------+ A和相同的“矩阵”,以指针到指针的形式: +-----------+-----------+-----------+-----+ | 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] | ... | +--------------+--------------+-----+ +-----------+-----------+-----------+-----+ |矩阵[0]|矩阵[1]|矩阵[2]|| +-----------+-----------+-----------+-----+ | | | ||V | | +--------------+--------------+-----+ || |矩阵[2][0]|矩阵[2][1]|| | | +--------------+--------------+-----+ | | |五 | +--------------+--------------+-----+ ||矩阵[1][0]|矩阵[1][1]|| | +--------------+--------------+-----+ | v +--------------+--------------+-----+ |矩阵[0][0]|矩阵[0][1]|| +--------------+--------------+-----+
无论您是否分配了正确的大小,这两个变量都是不兼容的,这正是编译器告诉您的。另请参见。优秀的ASCII艺术。这让你的答案很有说服力(也很优雅),有没有ascii工具可以做到这一点?@artm不知道,我只是把这些东西直接写在网站的文本输入框中。:)手工绘制的效果令人印象深刻,它看起来非常精确(所有
指针都正确对齐:)
+-----------+-----------+-----------+-----+
| 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] | ... |
+--------------+--------------+-----+