如何构建基于Vector结构体的二级指针矩阵并加载数据
实现由Vector结构体组成的矩阵(二级指针形式)
根据你的需求,我们可以通过创建指向Vector结构体的二级指针,来存储多个Vector实例(对应示例中的vec1、vec2、vec3)。以下是修改并完善后的代码:
#include <stdio.h> #include <stdlib.h> // 每个Vector的元素数量(对应示例中的4行) int vec_size = 4; // Vector的数量(对应示例中的3列:vec1、vec2、vec3) int vec_count = 3; typedef struct { int size_array; int *array; } Vector; // 打印矩阵内容的辅助函数 void print_matrix(Vector **matrix, int count, int size) { // 打印表头 printf(" "); for (int i = 0; i < count; i++) { printf("vec%d ", i+1); } printf("\n"); // 打印每行数据 for (int row = 0; row < size; row++) { printf(" row%d ", row+1); for (int col = 0; col < count; col++) { printf("%-5d", matrix[col]->array[row]); } printf("\n"); } } // 释放矩阵内存的辅助函数 void free_matrix(Vector **matrix, int count) { for (int i = 0; i < count; i++) { free(matrix[i]->array); free(matrix[i]); } free(matrix); } int main() { // 1. 分配存储Vector指针的数组(二级指针) Vector **matrix = (Vector **)malloc(vec_count * sizeof(Vector*)); if (matrix == NULL) { perror("Failed to allocate matrix"); return 1; } // 2. 初始化每个Vector并填充数据 // vec1的数据:1,2,4,5 matrix[0] = (Vector *)malloc(sizeof(Vector)); matrix[0]->size_array = vec_size; matrix[0]->array = (int *)malloc(vec_size * sizeof(int)); matrix[0]->array[0] = 1; matrix[0]->array[1] = 2; matrix[0]->array[2] = 4; matrix[0]->array[3] = 5; // vec2的数据:3,5,6,7 matrix[1] = (Vector *)malloc(sizeof(Vector)); matrix[1]->size_array = vec_size; matrix[1]->array = (int *)malloc(vec_size * sizeof(int)); matrix[1]->array[0] = 3; matrix[1]->array[1] = 5; matrix[1]->array[2] = 6; matrix[1]->array[3] = 7; // vec3的数据:8,9,10,11 matrix[2] = (Vector *)malloc(sizeof(Vector)); matrix[2]->size_array = vec_size; matrix[2]->array = (int *)malloc(vec_size * sizeof(int)); matrix[2]->array[0] = 8; matrix[2]->array[1] = 9; matrix[2]->array[2] = 10; matrix[2]->array[3] = 11; // 打印验证矩阵内容 print_matrix(matrix, vec_count, vec_size); // 释放内存,避免泄漏 free_matrix(matrix, vec_count); return 0; }
关键步骤说明
- 二级指针分配:
Vector **matrix是指向Vector指针的指针,先为它分配vec_count个Vector指针的空间,对应你需要的3个列向量(vec1、vec2、vec3)。 - 单个Vector初始化:逐个为每个Vector分配结构体内存,再为其
array成员分配存储元素的空间,最后填充对应的数据。如果Vector数量较多,也可以用循环简化初始化逻辑。 - 内存管理:添加
free_matrix函数,确保所有分配的内存都被正确释放,避免内存泄漏。 - 打印验证:通过
print_matrix函数将矩阵内容按你给出的格式打印,方便验证结果。
代码运行输出
运行上述代码后,会输出:
vec1 vec2 vec3 row1 1 3 8 row2 2 5 9 row3 4 6 10 row4 5 7 11
内容的提问来源于stack exchange,提问作者ecjb
相关产品推荐
相关产品推荐

