如何创建数组以便将其作为指向此函数的指针传递?
void SomeFunction(double *a, double *b, double *c);
我制作了我的2D阵列(但我有错误):
static double matrix_a [MATRIX_DIM][MATRIX_DIM];
static double matrix_b [MATRIX_DIM][MATRIX_DIM];
static double matrix_c [MATRIX_DIM][MATRIX_DIM];
for (i=0;i<MATRIX_DIM;i++) {
for (j=0;j<MATRIX_DIM;j++) {
// initializing matrices here
}
}
现在我指向数组:
double *a = &matrix_a;
double *b = &matrix_b;
double *c = &matrix_c;
然后调用函数:
SomeFunction(a, b, c);
但是我收到以下错误:
cannons.c: In function ‘main’:
cannons.c:29:14: warning: initialization from incompatible pointer type [enabled by default]
double *a = &matrix_a;
^
cannons.c:30:14: warning: initialization from incompatible pointer type [enabled by default]
double *b = &matrix_b;
^
cannons.c:31:14: warning: initialization from incompatible pointer type [enabled by default]
double *c = &matrix_c;
^
为什么?
答案 0 :(得分:0)
double *
表示&#34;指向单个双&#34;的指针。但是,您有一个数组,其元素是double数组。所以你实际上想要一个指向double数组的指针:
double (*a)[MATRIX_DIM] = &matrix_a[0]; // or matrix_a
以a[1][2] = 5.0;
方式访问它时。或者,您可以立即指向整个阵列:
double (*x)[MATRIX_DIM][MATRIX_DIM] = &matrix_a;
但是你需要一个额外的间接级别才能访问它:(*x)[1][2] = 5.0;
您还需要在参数列表中使用相同的声明。