我正在尝试像这样定义一个矩阵 我有一个结构
typedef struct _struct {
int name;
int data;
} myDataType;
然后我定义一个矩阵
int **myMatrix = calloc(size,sizeof(int*));
for()
// allocate rows except last index
myMatrix[last_index_in_matrix] = calloc(1,sizeof(myDataType));
问题是我无法访问它说的 myMatrix[last_index].data,也尝试过 -> (我真的不知道什么时候使用什么)
request for member ‘data’ in something not a structure or union
我做错了什么?我应该发布实际代码吗?如果这种方法不可行,我可以得到不同的建议吗?
更新:我再说一遍,矩阵都是整数,我只想让最后一行指向那个结构,一些评论没有考虑到这一点。这就是我在示例中声明它的方式。
最佳答案
让我们从简单的开始:
您想创建一个 myDataType
矩阵。如果你在编译时知道行数和列数,你可以简单地声明为
myDataType matrix[ROWS][COLS];
如果你需要动态分配它,你会做这样的事情:
myDataType **matrix;
matrix = calloc(rows, sizeof *matrix);
if (matrix)
{
size_t r;
for (r = 0; r < rows; r++)
{
matrix[r] = calloc(cols, sizeof *matrix[r]);
}
}
无论哪种方式,要访问第 i
和 j
元素的结构成员,您将编写:
matrix[i][j].name = ...;
matrix[i][j].data = ...;
编辑
啊,我明白了。
不要那样做。
无法保证指向 struct
类型的指针与指向 int
的指针具有相同的大小和表示形式。它们适用于最常见的架构,但这不是您可以依赖的东西。如果他们不这样做,那么您将遇到运行时问题。
从设计的角度来看,这让我很痒;如果您需要将该结构与矩阵相关联,请创建一个新的聚合类型来明确地这样做:
struct composite
{
int **matrix;
struct myData data;
};
当您还需要释放矩阵时,这将使生活更轻松。
FWIW,为了做你想做的事,你需要进行一些类型转换体操,比如
(struct myData *) myMatrix[last_index] = malloc(sizeof (struct myData));
和
((struct myData *) myMatrix[last_index])->data = ...;
但正如我上面所说,如果指针类型不兼容,转换可能会导致运行时错误。不要这样做。坏枣。
关于c - C中具有混合数据类型的指针矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840363/