以下列方式创建链接列表时,我了解除了以下所发生的一切:
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 ;
}
}
答案 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。