【发布时间】:2019-02-23 14:23:49
【问题描述】:
我有一个程序可以在 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 中的指针符号。我真的不知道它应该是什么样子,但据我所知,它不应该主要使用 * 。任何想法我应该改变什么以及如何改变?
谢谢!
【问题讨论】:
-
你将不得不解释更多。与
PrQueue *create( int *Error )相比,使代码更易于使用 很难。也许您可以简单地更改代码以省略int *Error参数并使用errno指示错误原因,因为对malloc()的调用将设置errno失败。除此之外?您的代码简单、直接且易于理解。 IMO 任何需要它“更容易”的人都可能在拼写 C 时遇到问题,而忘记在其中进行编码。因为当您使用malloc()动态创建对象时,不可能不返回指针。 -
but as I understand it shouldn't use * in the main你可以typedef the pointer 离开。我认为这是不好的做法,但如果这是你的导师想要的...... -
@martin 你应该发布到代码审查堆栈交换,因为你实际上是在要求人们审查你的代码。
-
是的,我就是这么想的。相信我,我并不真正了解自己有什么问题,但任务很明确“从 main 中删除 * 星,以便用户更容易”。我不知道,也许我应该以某种方式将其更改为 void 功能或类似的东西? int *Error 部分无关紧要,我可以省略,但这不是重点。
-
@NickODell Maybee!我怎样才能做到这一点?
标签: c