将结构矩阵传递给函数 [duplicate]

Passing a matrix of structs to a function [duplicate]

提问人:joy 提问时间:12/27/2020 最后编辑:joy 更新时间:12/27/2020 访问量:72

问:

如何将矩阵传递给另一个文件中的函数来执行某些操作?我分配了包含如下结构的矩阵:

   typedef struct {
        int x;
        int y;
        int z;
    } myStruct;
    
    myStruct(*matrix)[COL] = malloc(ROW*sizeof*matrix);
c 函数 矩阵 结构 malloc

评论

0赞 Tom Karzes 12/27/2020
要传递指针,只需传递它:.以与帖子中所示相同的方式声明它。你没有试过吗?func(matrix)
0赞 joy 12/27/2020
@TomKarzes我试过了,但我的函数应该在另一个文件中。不在包含 main 的文件中。所以,给了我这个错误:函数“myFunction”的隐式声明。也许是因为它看不到结构(?
0赞 Tom Karzes 12/27/2020
与任何函数一样,您需要先声明它,然后才能调用它。该问题与您传递的特定参数类型无关。你知道如何声明一个函数吗?

答:

0赞 Mureinik 12/27/2020 #1

矩阵是数组的数组,因此您可以使用指向 的指针的指针以及行数和列数,以便函数知道如何处理它:mystruct

void myfunction(mystruct** matrix, int rows, int columns) {
    // Your logic goes here...
}

评论

0赞 joy 12/27/2020
我试过了,但我的函数应该在另一个文件中。不在包含 main 的文件中。所以,给了我这个错误:函数“myFunction”的隐式声明。也许是因为它看不到结构(?
0赞 Mureinik 12/27/2020
@joy 这与结构无关。在正式定义函数之前调用该函数。有关详细信息,请参阅例如 stackoverflow.com/q/8440816/2422776
0赞 joy 12/27/2020
不,它是定义的,是这个定义给我带来了问题。
0赞 tstanisl 12/27/2020 #2

使用 C99 中的 VLA。

void myfunction(int rows, int cols, myStruct matrix[rows][cols]) {
  ...
}

评论

0赞 ryyker 12/27/2020
从,而不是形式。也许应该提到除了 C99 之外,VLA 也是 C11 及更高版本的可选
0赞 tstanisl 12/27/2020
@ryyker,是的,它在 C11 中是可选的。这很可悲,因为它大大简化了多尺寸阵列的处理。尽管如此,大多数编译器都支持它,并且有一个宏来检查是否支持 VLA。