gpt4 book ai didi

c - 使用数组插入所有已声明的对象

转载 作者:行者123 更新时间:2023-11-30 16:37:31 25 4
gpt4 key购买 nike

我的学校作业包括创建一个使用Matrix进行数学运算的程序。在此程序中,我必须使用 typedef 创建Matrix

这个typedef应该保存4 x 4Matrixdouble类型。

因此,这是我的实现:

typedef struct {
char * name;
double * data;
int elements;
} mat;

在 main 中,我需要这样定义几个 mat 对象:

mat MAT_A, MAT_B, MAT_C, MAT_D, MAT_E, MAT_F;

并且该用户应键入其输入,例如:add_mat mat_a,mat_b,mat_c,此操作会将 2 个 Matrix mat_amat_b 添加到 mat_c 中。

因此,在此用户输入并用 Comma\Tab 分割它之后,我想编写一个简单的函数来获取 char 这是所需的 mat 并返回相关的 mat:

例如:

mat getmatrix(char name, mat *mats)
{
int i;
for (i = 0; i < 6; i++)
{
if (strcmp(mats[i].name, "MAT_A") == 0)
{
return mats[i];
}
}

.....
}

为此,我将所有 mat 对象插入到 array 中:

mat mats[] = { MAT_A, MAT_B, MAT_C, MAT_D, MAT_E, MAT_F };

但是我的所有 mat 对象 都收到此错误:

uninitialized local variable 'MAT_A' used

关于如何修复它或寻找其他方法来读取输入有什么建议吗?

最佳答案

你写的方式,mats将包含 MAT_A 等的副本。这不是您想要的。

您的getmatrix函数还返回矩阵的副本。您实际上并不需要它(复制包含指针的结构是危险的;但请参见下文)。您可能希望通过指针返回矩阵,并通过指针在所有函数中接受矩阵参数。

我建议摆脱 MAT_A和 friend ,因为你并不真正需要他们。仅使用mats[i] 。您需要指定 mats 中的元素数量:

mat mats[10];

不要忘记初始化mats正确地。

如果出于某些不正当的原因,您需要定义 10 个左右不同的类型 mat 的变量,您需要更改mats成为一个指针数组(是的,这里的共同主题是指针,你必须在任何地方使用它们)。

mat* mats[] = { &MAT_A, &MAT_B, /* etc */ };

更改getmatrix相应地。

另一件事要考虑:如果你的矩阵维度是固定的,那么你毫无理由地使用指针。声明double data[4][4]将大大简化事情。关于 name 也是如此,考虑将其设为固定大小的字符数组。

关于c - 使用数组插入所有已声明的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47866983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com