环顾四周后,我构建了一个函数,它接受一个矩阵并执行我需要的任何操作,如下所示:
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/