我对何时在 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 语言中,强制转换是否取决于实现的类型?
谢谢你的帮助
这两种情况下都不需要强制转换。这两个例子在这方面并不相同,这可能是一个疏忽。