二维数组在C中传递

时间:2016-10-27 01:04:56

标签: c arrays pointers multidimensional-array

如何创建数组以便将其作为指向此函数的指针传递?

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;
              ^

为什么?

1 个答案:

答案 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;

您还需要在参数列表中使用相同的声明。