main函数设置的是指针,初始化函数传指针导致错误
#include<stdio.h>
#include<malloc.h>
typedef struct Node{
int data;
struct Node* next;
}Node;
void InitLinkList(Node *L)
{
L=(Node*)malloc(sizeof(Node));
L->next=NULL;
}
int main()
{
Node *L;
InitLinkList(L);
}
初学者可能看上述代码觉得是对的,其实上述代码是错误的,因为初始化要改变指针L的值,可传入初始化函数的参数却是指针L本身。
这本身就是值传递和地址传递的问题,改变变量的值,函数就得传变量的地址进去,要改变指针的值,那就应该传二级指针进去。
上述代码有2种改法:
第一种
void InitLinkList(Node **L)
{
(*L)=(Node*)malloc(sizeof(Node));
(*L)->next=NULL;
}
初始化函数传二级指针:
int ma