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

时间:2017-12-18 10:56:25

标签: c

我有学校作业,其中包括创建一个用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_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 对象

都出现此错误
  

未初始化的本地变量&#39; MAT_A&#39;使用

有关如何修复或者可能找到其他方式来阅读输入的任何建议吗?

1 个答案:

答案 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的同样的事情,考虑使它成为固定大小的字符数组。