我有学校作业,其中包括创建一个用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
,此操作将添加2 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
对象的错误:
使用未初始化的局部变量'MAT_A'
有关如何解决它的任何建议或者可能找到另一种方式来阅读输入?
你写它的方式,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
的同样的事情,考虑使它成为一个固定大小的字符数组。