- 论坛徽章:
- 0
|
昨天写一个矩阵刚好遇到这问题……我的做法是,用一维数组模拟多维数组,手动计算下标
struct _matrix
{
int row;
int column;
int ref;
int *data;
};
typedef struct _matrix Matrix;
Matrix *matrix_new (int row, int column, int value)
{
Matrix *m;
int i, j;
assert (column > 0);
assert (row > 0);
m = (Matrix *)malloc (sizeof (Matrix));
if (m == NULL)
{
fprintf (stderr, "malloc() error\n");
return NULL;
}
m->data = (int *)malloc (sizeof (int) * row * column);
if (m->data == NULL)
{
fprintf (stderr, "malloc() error\n");
free (m);
return NULL;
}
for (i = 0; i < row; i++)
{
for (j = 0; j < column; j++)
{
(m->data)[i * column + j] = value; //就是这一行,手动计算下标,把每个元素初始化为value
}
}
m->row = row;
m->column = column;
m->ref = -1;
return m;
} |
data 本来应该是一个二维的数组(data[][]),但是大小无法确定,干脆就用一维的模拟
C FAQ 第6章有提到这个问题。 |
|