我有一个名为 Vector 的结构,它包含一个数组及其大小。我在代码中填充它如下:
vec1
row1 1
row1 2
row1 4
row1 5
我想要做的是有一个 Vectors 数组(一个矩阵,可能是指向结构的指针?)这样我就可以按如下方式加载数据
vec1 vec2 vec3
row1 1 3 8
row1 2 5 9
row1 4 6 10
row1 5 7 11
这里是代码:
#include <stdio.h>
#include <stdlib.h>
int ncol = 4;
int nrow = 3;
typedef struct {
int size_array;
int *array;
} Vector ;
int main()
{
Vector *vec1 = (Vector *) malloc(sizeof(Vector));
vec1->array = (int *) malloc(ncol * sizeof(int));
vec1->size_array = ncol;
vec1->array[0] = 1;
vec1->array[1] = 2;
vec1->array[2] = 4;
vec1->array[3] = 5;
return 0;
}
您只需将
nrow
的维度添加到向量的 malloc 调用中。然后你可以在一个循环中分配你的矢量数据。
#include <stdio.h>
#include <stdlib.h>
int ncol = 4;
int nrow = 3;
typedef struct {
int size_array;
int *array;
} Vector ;
int main()
{
int i;
Vector *vectors;
vectors = (Vector *) malloc(nrow * sizeof(Vector));
for (i = 0; i < nrow; i++)
{
Vector* vec1 = &vectors[i];
vec1->array = (int *) malloc(ncol * sizeof(int));
vec1->size_array = ncol;
vec1->array[0] = 1;
vec1->array[1] = 2;
vec1->array[2] = 4;
vec1->array[3] = 5;
}
for (i = 0; i < nrow; i++)
{
for (int j = 0; j < vectors[i].size_array; j++)
{
printf("%d ", vectors[i].array[j]);
}
printf("\n");
}
return 0;
}
应该打印
1 2 4 5
1 2 4 5
1 2 4 5
简化分配
使用
ptr = malloc(sizeof ptr[0] * n)
模型
// Vector *vec1 = (Vector *) malloc(sizeof(Vector));
Vector *vec1 = malloc(sizeof vec1[0] * n);
查看分配结果
分配给
nrows
Vector *matrix1 = malloc(sizeof vec1 * nrow);
if (matrix1 == NULL) TBD_code();
for (size_t r = 0; r < nrow; r++) {
matrix1[r].array = malloc(sizeof matrix1[r].array[0] * ncol);
if (matrix1[r].array == NULL) TBD_code();
for (size_t c = 0; c < ncol; c++) {
matrix1[r].array[c] = TBD_code;
}
}
备选方案
要直接形成一个矩阵,我们可以使用
typedef struct {
int rows, columns;
int **m;
} Matrix;
或
typedef struct {
int rows, columns;
int *m[]; // variable logic array
} Matrix;
或其他人。