gpt4 book ai didi

c - 如何使用 malloc 从 C 中的函数创建和返回二维矩阵?

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

我试图将一个文件发送到一个函数,该函数创建一个名为 Entry 的结构矩阵,根据文件填充它,然后返回该矩阵。现在这是一连串的错误,如果需要我可以添加,但我怀疑我只是犯了多个愚蠢的错误。如果有一种不涉及 malloc 的更简单的方法,那也同样有效。

我哪里做错了,我怎样才能正确地做到这一点?

相关代码如下:

Entry **matCreate(FILE *fp){

// initialize matrix
Entry matrix = malloc(states * N_CC * sizeof(Entry));

// populate the matrix with initial values
for (int i = 0; i < states; i++) {
for (int j = 0; j < N_CC; j++) {
matrix[i][j].next = 99;
matrix[i][j].action = "D";
}
}
return matrix;
}

在主函数中:

Entry **matrix = matCreat(fp);

我正在开始这个功能

Entry **matCreate(FILE *fp){

初始化它
Entry (*matrix)[N_CC] = malloc( states * sizeof *matrix );

填充它:

for (int i = 0; i < states; i++) {
for (int j = 0; j < N_CC; j++) {
matrix[i][j].next = 99;
matrix[i][j].action = "D";
}
}

从 main 获取它: 输入 ourMat = (*matCreate(fp))[N_CC];

但是仍然报错: tokenize.c:84:1: 警告:从不兼容的指针类型返回 [默认启用]

我哪里错了?

最佳答案

C 没有真正的多维数组类型。您必须返回一个锯齿状数组,或者返回一个数组数组。 (此外,由于数组不能按值返回;在这两种情况下,您都必须动态分配数组,并返回指向它的指针)。 Further reading .

对于数组选项的数组,您可以像这样声明和分配它:

Entry (*matrix)[N_CC] = malloc( states * sizeof *matrix );

通过将此模式用于 malloc 的参数,您不必担心任何复杂的事情。

返回这个指针的函数类型是:

Entry (*matCreate(FILE *fp))[N_CC];

在调用代码中你可以使用这样的函数:

Entry (*matrix)[N_CC] = matCreate(fp);
bar( matrix[1][2].action );

您可以使用 typedef 来简化所有这些语法。就我个人而言,我不喜欢这样做,因为这样当数组指针衰减发生时就不那么明显了。

关于c - 如何使用 malloc 从 C 中的函数创建和返回二维矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26371915/

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