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

问题描述 投票:0回答:1

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

这个typedef应该持有4 x 4 Matrixdouble类型。

所以这是我的实现:

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_amat_bmat_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'

有关如何解决它的任何建议或者可能找到另一种方式来阅读输入?

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

© www.soinside.com 2019 - 2024. All rights reserved.