如何将矩阵加载为指向结构 Vector 的指针

问题描述 投票:0回答:2

我有一个名为 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;
}

arrays c pointers vector struct
2个回答
1
投票

您只需将

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

1
投票

简化分配

使用

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;

或其他人。

© www.soinside.com 2019 - 2024. All rights reserved.