C 链表实现
C Linked lists implementation
我在理解链表的实现时遇到问题,我了解了基本概念,但我有一个问题:
new_node = (node*) malloc(sizeof(node))
为什么我们在这里使用(节点*)?为什么我们不直接说:
new_node = malloc(sizeof(node))?
提前感谢您的回答。
typedef struct node{
int value;
struct node* next_node;
}node;
node* create_node(int v){
node* new_node;
new_node=(node*) malloc(sizeof(node));
if(new_node==NULL){
fprintf(stderr, "Allocation problem.\n");
exit(1);
}
new_node->value=v;
new_node->next_node=NULL;
return new_node;
}
malloc ()
的return类型是空指针。
此 void 指针无需任何转换即可安全地提升为结构类型。
所以你不需要转换malloc()
的结果。
但是包含强制转换是一个很好的编码习惯。
您可以阅读详细答案here。
更正:@UnderDog
我在理解链表的实现时遇到问题,我了解了基本概念,但我有一个问题:
new_node = (node*) malloc(sizeof(node))
为什么我们在这里使用(节点*)?为什么我们不直接说:
new_node = malloc(sizeof(node))?
提前感谢您的回答。
typedef struct node{
int value;
struct node* next_node;
}node;
node* create_node(int v){
node* new_node;
new_node=(node*) malloc(sizeof(node));
if(new_node==NULL){
fprintf(stderr, "Allocation problem.\n");
exit(1);
}
new_node->value=v;
new_node->next_node=NULL;
return new_node;
}
malloc ()
的return类型是空指针。
此 void 指针无需任何转换即可安全地提升为结构类型。
所以你不需要转换malloc()
的结果。
但是包含强制转换是一个很好的编码习惯。 您可以阅读详细答案here。 更正:@UnderDog