如何使用带有 malloc 和 size 的强制转换和指针



我对何时在 C 中使用带有 malloc 的强制转换感到困惑。这 2 段代码有什么区别(有问题的代码是初始化链表的函数(:

第一节摘录:

  struct QueueNode {
  char content;
  struct QueueNode* prev;
  struct QueueNode* next;
 };
  struct Queue{
  struct QueueNode* first;
 struct QueueNode* last;
};  

队列初始化:

Queue* queueCreate() {
Queue* q = (Queue*) malloc(sizeof(Queue));
q->first = NULL;
q->last = NULL;
return q;

}

第二节摘录:

typedef struct Element Element;
struct Element
 {
 int number;
 Element *next;
 };
typedef struct List List;
struct List
{
 Element *first;
};

队列初始化:

List *initialisation()
{
List *l = malloc(sizeof(*l));
Element *element = malloc(sizeof(*element));
if (l == NULL || element == NULL)
{
    exit(EXIT_FAILURE);
}
element->number = 0;
element->next = NULL;
l->first = element;
return l;
 }

这是我不明白的:为什么在第一个摘录中我们使用强制转换(队列*(:

 Queue* q = (Queue*) malloc(sizeof(Queue));

而在第二节选中,没有演员表,但我们传递了一个指针 (*l( 到 sizeof,并且没有演员表?

Liste *l = malloc(sizeof(*l))

所以我想问题是何时使用强制转换以及何时将指针传递给 sizeof 函数。

附言。我在这里阅读了一些答案,所以像这样使用 malloc(( 和 sizeof(( 在堆上创建一个结构

这是关于C ++的,它说你必须添加一个演员表。在 C 语言中,强制转换是否取决于实现的类型?

谢谢你的帮助

这两种情况下都不需要强制转换。这两个例子在这方面并不相同,这可能是一个疏忽。

相关内容

  • 没有找到相关文章

最新更新