将矩阵分配给结构

时间:2018-09-29 20:08:19

标签: c

基本上,我正在尝试将矩阵元素分配给结构数组。第一个结构具有a = 1,b = 2,c = 3,第二个a = 4,b = 5,c = 6,依此类推。我现在的问题是我无法在setmat函数中弄清楚该怎么做。

#include <stdio.h>
#include <stdlib.h>

#define COLS 3
#define MAX_ENTRIES 3

typedef struct str_t_ {
    int a;
    int b;
    int c;
} str_t;

void setmat(str_t *str, int mat[][COLS]) {
    str->a = mat[][0];
    str->b = mat[][1];
    str->c = mat[][2];
}

void printmat(str_t str[MAX_ENTRIES]) {
    int i;
    for (i = 0; i < MAX_ENTRIES; i++) {
        printf("%d %d %d\n\n", str[i].a, str[i].b, str[i].c);
    }
}

int main(void) {
    int matrix[][COLS] = {
            { 1, 2, 3 },
            { 4, 5, 6 },
            { 7, 8, 9 }
    };
    typedef str_t str_;
    str_ *structs[MAX_ENTRIES];
    int i;
    for (i = 0; i < MAX_ENTRIES; i++) {
        setmat(&structs[i], matrix);
    }
    printmat(structs);
    return EXIT_SUCCESS;
}

2 个答案:

答案 0 :(得分:1)

您正在混合复制2d数组和复制2d数组的一行。 复制2d数组的版本可能如下:

void setmat(str_t *str, int mat[][COLS]) {
    for(i = 0;i < MAX_ENTRIES;i++)  {
        str->a = mat[i][0];
        str->b = mat[i][1];
        str->c = mat[i][2];
        str++;
    }
}

,呼叫应为:

setmat(structs, matrix);

答案 1 :(得分:0)

更改setmat的定义以获取指向矩阵行的指针:

void setmat(str_t *str, int row[COLS]) {
    str->a = row[0];
    str->b = row[1];
    str->c = row[2];
}

您的main函数中还有另一个问题:structs不是str_t的数组,它定义为指向str_t的指针的数组。此外,样式不好,不必在本地范围内定义类型。

这是更正的版本:

int main(void) {
    int matrix[][COLS] = {
            { 1, 2, 3 },
            { 4, 5, 6 },
            { 7, 8, 9 }
    };
    str_t structs[MAX_ENTRIES];
    int i;
    for (i = 0; i < MAX_ENTRIES; i++) {
        setmat(&structs[i], matrix[i]);
    }
    printmat(structs);
    return EXIT_SUCCESS;
}