提问人:joy 提问时间:12/27/2020 最后编辑:joy 更新时间:12/27/2020 访问量:72
将结构矩阵传递给函数 [duplicate]
Passing a matrix of structs to a function [duplicate]
问:
如何将矩阵传递给另一个文件中的函数来执行某些操作?我分配了包含如下结构的矩阵:
typedef struct {
int x;
int y;
int z;
} myStruct;
myStruct(*matrix)[COL] = malloc(ROW*sizeof*matrix);
答:
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。
评论
func(matrix)