要使我的C程序更加人性化需要进行哪些更改?

时间:2019-02-23 14:23:49

标签: c

我有一个程序可以在C语言中创建,插入,删除和销毁优先级队列。一切正常,但是我有一个任务可以使用户更轻松地创建队列。

int Error;
PrQueue* q1= create(&Error);
PrQueue* q2 = create(&Error);
PrQueue* q3 = create(&Error);

这是我创建优先级队列的方法。

PrQueue* create(int* Error)
{
PrQueue* Meta = (PrQueue*)malloc(sizeof(PrQueue));
if(Meta == NULL)
{
    *Error = 1;
    return NULL;
}
Meta->NrOfItems = 0;
Meta->Head = NULL;
*Error = 0;
return Meta;
}

这就是功能

typedef struct Element
{
int Data;
int Priority;
struct Element *Next;
struct Element *Prev;
} Element;


typedef struct
{
int NrOfItems;
struct Element *Head;

} PrQueue;

这就是结构。 所有这些代码部分都在不同的文件中。第一个是main.c,第二个是functions.c,第三个是.h头文件。 因此,我需要以某种方式使用户更容易在main中创建优先级队列,我应该以某种方式摆脱main中的指针符号。我真的不知道它的外观,但是据我了解,它不应在主体中使用*。有什么想法我应该如何改变?

谢谢!

1 个答案:

答案 0 :(得分:1)

我的建议是将您的create()函数转换为init()函数;这样,用户就可以在其他对象内部和/或堆栈中而不是仅在堆上创建PrQueue对象:

void init(PrQueue * Meta)
{   
   Meta->NrOfItems = 0;
   Meta->Head = NULL;
}

这也意味着该功能不会失败,因此用户无需进行任何错误检查。

用户可以这样使用它:

int main(int argc, char ** argv)
{
   PrQueue q;
   init(&q);
   [...]
}