【问题标题】:2D array passing in C二维数组传入 C
【发布时间】:2016-10-27 01:04:56
【问题描述】:

如何创建一个数组,以便将其作为指针传递给该函数?

void SomeFunction(double *a, double *b, double *c);

我这样制作了我的二维数组(但我有错误):

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

为什么?

【问题讨论】:

  • 是不是因为你传递的参数不是指针?

标签: c arrays pointers multidimensional-array


【解决方案1】:

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;

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

【讨论】:

  • 我怎样才能使数组符合函数参数列表的预期?我不明白该函数是如何工作的,所以我无法更改类型,但我需要将二维数组传递给它
  • @abc 你可以使用(double *)&amp;matrix_a。这将以行优先顺序显示具有一维数组视图的函数
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多