C语言中的链表初始化



我正在处理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;
}

检查正确答案,用适当的指令替换/*初始化字段*/:

☐毛皮->data=数据;

☐毛皮->数据=&数据

☐毛皮->data=*数据;

☐毛皮->data=malloc(sizeof(int((;

*(pelt->data) = data;

☐毛皮->data=malloc(sizeof(int((;

pelt->data = data;

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

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

相关内容

  • 没有找到相关文章

最新更新