基本上,我正在尝试将矩阵元素分配给结构数组。第一个结构具有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;
}
答案 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;
}