【发布时间】:2023-04-03 04:09:01
【问题描述】:
我正在处理 C 编程语言链接列表,并且我有下面的 MCQ:
我们有以下喜欢的列表:
typedef struct _elt *PElement;
typedef struct _elt {
void *data;
PElement next;
} Element;
PElement creer_elt_entier(int data) {
PElement pelt=(PElement)malloc(sizeof(Element));
/* Initialize data field*/ ;
pelt->next=NULL;
return pelt;
}
检查正确的答案,将 /* Initialize Field */ 替换为适当的指令:
☐ pelt->data=data;
☐ pelt->data=&data;
☐ pelt->data=*data;
☐ pelt->data=malloc(sizeof(int));
*(pelt->data) = data;
☐ pelt->data=malloc(sizeof(int));
pelt->data = data;
我无限制地回答了第四个选择,这是正确的答案,但我仍然不知道为什么它是正确的。
【问题讨论】:
-
这是唯一会通过类型系统而不分配在函数返回时变得无效的值的答案(这是答案 2 所做的)。尽管如此,它仍然缺乏错误检查(
malloc可能会失败)并鼓励可怕的内存分配策略。在节点中存储指向malloced 的指针而不是直接存储int很可能是不必要的浪费。此外,命名结构_elt完全是 UB。
标签: c pointers linked-list