You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:57:46