我一直在做一些矩阵计算的下大学那天,我有一个5x5矩阵,开始用,所以我硬编码入来源。 这就像双打的2D阵列:
/**
* This is the probability-matrix for reaching from any profile
* to another by randomly selecting a friend from the friendlist.
*/
static const double F[5][5] = {
/* P , F , L , A , S */
/* Peter */ {0 , 0.5 , 0.5 , 0 , 0 },
/* Franz */ {1.0 , 0 , 0 , 0 , 0 },
/* Lisa */ {0 , 1/3.0, 0 , 1/3.0, 1/3.0},
/* Anna */ {0 , 0 , 0 , 0 , 1 },
/* Sepp */ {0 , 0.5 , 0.5 , 0 , 0 }
};
我想我的功能不被固定到5×5的矩阵操作,所以我总是行和/或COLS的数量传递给该函数。 这迫使我不使用double [][X]
语法,因为它不能完全“变量”,转而使用double*
作为函数参数。
inline size_t matrix_get(int rows, int i, int j);
inline void matrix_print(double* m, int rows, int cols);
inline void matrix_copy(double* d, const double* s, int rows, int cols);
void matrix_multiply(
int m, int n, int l,
const double* a, const double* b, double* d);
但我打电话,接受一个功能时,总是得到这样的警告double*
当我通过double [5][5]
来代替。
fuenf_freunde.c:138:17: warning: incompatible pointer types passing 'double [5][5]' to parameter of
type 'double *' [-Wincompatible-pointer-types]
matrix_print( R, 5, 5);
^
fuenf_freunde.c:54:27: note: passing argument to parameter 'm' here
void matrix_print(double* m, int rows, int cols)
^
使用铸造(double*) F
解决了警告。
现在,我的问题是
- 我错了铸造2D双阵列的双指针?
- 为什么它的工作,如果其非法的?
- 什么是通过一个n维的任意尺寸数组的函数的正确方法?
编辑:这清除了很多,为我: Accesing使用单一指针二维数组
所以,我应该只使用double[x*y]
而不是double[x][y]
我想。 但它是合法的投double[]
以double*
?