我正在处理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;
我回答了第四个选择,这是正确的答案,但我仍然不知道为什么它是正确的。
- 第一个选项
pelt->data = data;
不正确,因为您无法将整数分配给void指针 - 第二个选项
pelt->data = &data;
不正确,因为如果将指针分配给参数数据,则当函数返回时,pelt->data
将是垃圾,因为此时所指向的变量将不存在 - 第三个选项
pelt->data = *data;
不正确,因为无法取消引用非指针变量 - 第四个选项
pelt->data = malloc(sizeof(int));
和*(pelt->data) = data;
是正确的;可以将指向整数类型堆变量的指针分配给void指针,并通过首先取消对堆变量的引用来初始化该堆变量 - 第五个选项
pelt->data=malloc(sizeof(int));
和pelt->data = data;
不正确,因为无法将整数分配给整数指针