【问题标题】:C: Hand over 2d array to a double pointerC:将二维数组交给双指针
【发布时间】:2018-06-07 23:23:23
【问题描述】:

我正在尝试将“test_array”交给双指针“**values”,它是“Matrix”结构的成员。

我想避免使用“malloc”,因为我想将代码用于嵌入式系统应用程序。有不同大小的矩阵,我只想使用一个结构。这背后的想法是指向一个静态二维数组以避免内存冲突。

#include <stdio.h>

struct Matrix {
    int rows;
    int columns;
    double **values;
};

static double test_array[2][3] = {{1,2,3},{4,5,6}};

int main (void)
{

    struct Matrix matrix;
    int i,j;

    matrix.rows = 2;
    matrix.columns = 3;
    matrix.values = test_array;

    for (i=0; i<matrix.rows; i++) {

        for (j=0; j<matrix.columns; j++) {
            printf("%f ", *(*(matrix.values + i) + j));
        }

        printf("\n");
    }

}

指向一维数组没什么大不了的,但它对于二维数组如何工作?

【问题讨论】:

  • 您最好的解决方案可能是使用double *values 和索引算法
  • 它不起作用。无法通过** 指针直接访问[M][N] 类型的二维数组。编译器已经告诉你不能matrix.values = test_array;
  • 实现这一目标的一种方法是间接实现:引入一个额外的中间指针数组,如下所述:stackoverflow.com/questions/3515045/…

标签: c arrays pointers memory-management


【解决方案1】:

你可以用这种方式定义你的结构 -

struct Matrix {
    int rows;
    int columns;
    double (*values)[];
};

并将其直接指向二维数组,下面的语句应该可以工作 -

matrix.values = test_array;

【讨论】:

  • 赋值本身会编译,但之后您不能将[] 应用到values
  • @HolyBlackCat,谢谢,但你能说得更具体点吗?
  • matrix.values[1][2] 导致error: invalid use of array with unspecified bounds coliru.stacked-crooked.com/a/760c04156f99579f
猜你喜欢
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 2020-02-28
相关资源
最近更新 更多