【发布时间】: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