我有学校作业,其中包括创建一个用Matrix
进行数学运算的程序。在此计划中,我必须使用Matrix
创建typedef
。
此typedef
应保留4 x 4
Matrix
double
类型。
所以这是我的实现:
typedef struct {
char * name;
double * data;
int elements;
} mat;
总的来说,我需要以这种方式定义几个mat
个对象:
mat MAT_A, MAT_B, MAT_C, MAT_D, MAT_E, MAT_F;
此用户应键入其输入,例如:add_mat mat_a,mat_b,mat_c
,
此操作会将Matrix
mat_a
和mat_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
对象:
未初始化的本地变量&#39; MAT_A&#39;使用
有关如何修复或者可能找到其他方式来阅读输入的任何建议吗?
答案 0 :(得分:0)
您编写它的方式,mats
将包含MAT_A等的副本。这不是您想要的。
您的getmatrix
函数也会返回矩阵的副本。你并不真的需要它(复制包含指针的结构是危险的;但见下文)。您可能希望通过指针返回矩阵,并且还通过指针接受所有函数中的矩阵参数。
我建议摆脱MAT_A
和朋友,因为你并不真正需要它们。仅使用 mats[i]
。您需要在mats
中指定元素数量:
mat mats[10];
不要忘记正确初始化mats
。
如果出于某种不正当的原因,您需要定义10个左右的mat
类型的不同变量,您需要将mats
更改为指针数组(是的,这里的常见主题是指针,你必须到处使用它们。)
mat* mats[] = { &MAT_A, &MAT_B, /* etc */ };
相应地更改getmatrix
。
另一件需要考虑的事情是:如果您的矩阵维度是固定的,那么您无需使用指针。声明double data[4][4]
将大大简化事情。关于name
的同样的事情,考虑使它成为固定大小的字符数组。