1

假设我有以下结构:

typedef struct elementT {
  int value;
  struct element *next;
} element;

这样做有什么区别:

element *newElem;
newElem = malloc(sizeof(element))

这样做:

element *newElem;
newElem = (element *) malloc(sizeof(element))

从我的角度来看,在第一种情况下,我们正在做:

element *newElem;-> 为包含元素类型的地址创建一个指针。 newElem = malloc(sizeof(element))-> 使该指针指向 malloc 的结果。

为什么我们需要做 (element *),或者它为什么有用?

谢谢

4

1 回答 1

1

它来自旧式 C,其中void *并没有真正被允许,所以一切都返回char *,这将导致编译器生成一个警告,指出您正在分配不兼容的指针类型,而强制转换只是摆脱这个警告的一种方法。较新的编译器知道您要做什么,因此不需要强制转换(在某些情况下,例如 Linux 内核 vmalloc 函数除外)。

于 2013-01-15T21:36:25.877 回答