【发布时间】:2010-08-26 00:26:45
【问题描述】:
typedef struct _DListNode
{
struct _DListNode* prev;
struct _DListNode* next;
void* data;
}DListNode;
在 gcc 中:
DListNode *p = NULL;
p = (DListNode*)malloc(sizeof(DListNode));
p->data = (int*)malloc(sizeof(int));
scanf("%d", (int*)p->data);
正确编译。
在 gcc 中:
DListNode *p = NULL;
p = (DListNode*)malloc(sizeof(DListNode));
(int*)p->data = (int*)malloc(sizeof(int));
scanf("%d", (int*)p->data);
有问题:
(int*)p->data = (int*)malloc(sizeof(int)); -------error: lvalue required as left operand of assignment.
区别:
scanf("%d", (int*)p->data) ,
(int*)p->data = (int*)malloc(sizeof(int)),
p->data = (int*)malloc(sizeof(int));
【问题讨论】:
-
无论哪种情况,您都不应该从
malloc转换 - 从void*转换是隐含在 C 中的。 -
更不用说,
data的类型是void*,所以从malloc转换纯属无稽之谈。 -
注意:以下划线和大写字母开头的标识符是保留的。所以从技术上讲,上面的内容是无效的:'_DListNode'