繁体   English   中英

C编程语言中的链表初始化

[英]linked list initialization in C programming language

我正在处理 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=malloc(sizeof(int));

*(pelt->data) = data;

☐ pelt->data=malloc(sizeof(int));

pelt->data = data;

我无限制地回答了第四个选择,这是正确的答案,但我仍然不知道为什么它是正确的。

  1. 第一个选项pelt->data = data; 不正确,因为您不能将 integer 分配给 void 指针。
  2. 第二个选项pelt->data = &data; 不正确,因为如果您将指针分配给参数data ,则当 function 返回时, pelt->data将是垃圾,因为指向的变量将不存在。
  3. 第三个选项pelt->data = *data; 不正确,因为您不能取消引用非指针变量。
  4. 第四个选项pelt->data = malloc(sizeof(int)); *(pelt->data) = data; 是正确的; 指向 integer 类型的堆变量的指针可以分配给 void 指针,并且通过首先取消引用它来初始化堆变量。
  5. 第五个选项pelt->data=malloc(sizeof(int)); pelt->data = data; 不正确,因为您不能将 integer 分配给 integer 指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM