链接列表和Malloc

时间:2014-10-27 10:30:54

标签: c

以下列方式创建链接列表时,我了解除了以下所发生的一切:

curr = (item *)malloc(sizeof(item));

我知道你为项目结构的大小分配了足够的内存,但你到底在做什么(项目*)?这是指针符号还是乘法?

#include<stdlib.h>
#include<stdio.h>

struct list_el {
   int val;
   struct list_el * next;
};

typedef struct list_el item;

void main() {
   item * curr, * head;
   int i;

   head = NULL;

   for(i=1;i<=10;i++) {
      curr = (item *)malloc(sizeof(item));
      curr->val = i;
      curr->next  = head;
      head = curr;
   }

   curr = head;

   while(curr) {
      printf("%d\n", curr->val);
      curr = curr->next ;
   }
}

2 个答案:

答案 0 :(得分:1)

这是一个指针转换:它将void*malloc(通用指针)返回到item*(您需要的特定类型的指针)。 void*是一个可以指向任何东西的指针,但你不能像间接和算术一样对它做任何有用的操作。

也就是说,强制转换为useless and considered bad practice,因为C语言可以保证void*在分配后自动转换为正确的类型。刚

curr = malloc(sizeof(item));

会做到这一点并且不易出错。

答案 1 :(得分:0)

(item *)部分是括号中的类型名称(item *表示“指向item”的指针),因此它是类型转换。

它们用于转换类型和should never be used with malloc()'s return value like this