c - 将矩阵传递给函数,C

标签 c function matrix

环顾四周后,我构建了一个函数,它接受一个矩阵并执行我需要的任何操作,如下所示:

float energycalc(float J, int **m, int row, int col){
...
}

在 main 中定义并填充了数组的大小,但是我无法将其传递给函数本身:

int matrix[row][col];
...
E=energycalc(J, matrix, row, col);

这会导致编译期间出现警告

"project.c:149: warning: passing argument 2 of ‘energycalc’ from incompatible pointer type project.c:53: note: expected ‘int **’ but argument is of type ‘int (*)[(long unsigned int)(col + -0x00000000000000001)]’

并导致段错误。

非常感谢任何帮助,谢谢。

最佳答案

函数应该这样声明

float energycalc( float J, int row, int col, int ( *m )[col] );

如果您的编译器支持可变长度数组。

否则如果在声明中

int matrix[row][col];

col 是一些常量,那么可以通过以下方式声明该函数

float energycalc(float J, int m[][col], int row );

前提是常量col是在函数之前定义的。

你的函数声明

float energycalc(float J, int **m, int row, int col);

当你有一个像这样声明的数组时适合

int * matrix[row];

数组的每个元素都是动态分配的,例如

for ( int i = 0; i < row; i++ ) matrix[i] = malloc( col * sizeof( int ) );

关于c - 将矩阵传递给函数,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29562068/

相关文章:

c - Glib:DBUS 属性中的 NULL

c - 暴力破解幻方时出现堆栈溢出错误。有什么可能的解决办法吗?

c - 是否有C语言单词词典来完成功能?

function - 使用 Swift 结构构造函数作为函数

python - 四处走走,python 中的 numpy 对象不匹配错误

c - 使用循环在 C 中打印模式

r - 函数表达式

c++ - 使用 atan2() 函数进行模拟时出现奇怪的 "yaw"行为

c - 将二维数组传递给 C 中的函数

c - 如何使用递归构建螺旋方阵?