随时更
文章目录
1. LinkList s = (LinkList)malloc(sizeof(LinkList));
LinkList :用户自己定义的链表,是一个结构体,比如:
typedef struct _LinkList {
int id; // 学号
char name[16]; // 姓名
struct _LinkList * next; // 指向下一个节点
} LinkList ;
malloc(size) : 一个C语言库函数, 用来申请一块动态内存, 参数size是要申请的内存的大小, 返回所申请的内存的地址,该地址是一个void *指针。 该函数可以获取某数据类型在内存中所占的字节,所以 malloc( sizeof(LinkList) ) 就是申请一块大小为sizeof(LinkList)的内存,由于返回的是一个void *指针类型的地址,我们不知道该地址存放的是什么内容,不能访问它。所以需要在前面加(LinkList*)把它转换成LinkList类型的指针,这样程序就知道它存放的是什么内容了,就可以正确访问了。 总的来说, LinkList *s=(LinkList*)malloc(sizeof(LinkList)); 就是申请一个LinkList *类型的数据s就跟你申请一个整形int n 类似,换成动态申请可以这样 int * n = (int *)malloc(sizeof(int)); n就是一个指向整形的指针。 另外,可以把malloc()换成C++里的new :LinkList *s = new LinkList(); 如果一次要创建多个n个LinkList c语言版的可以这样:LinkList *s = (LinkList*)malloc(sizeof(LinkList) * n); C++版的可以这样:LinkList *s = new LinkList[ n ];
2. *L和 *&L
指针的引用而已,因CreateLinkList这个函数要修改链表,所以如果传一个指针类型的参数达不到修改目的的,所以用引用。
这两个有着一个共同点,都指向顺序表 L ,如果在函数中修改L 的内容,都影响到 L 的内容。
不同点则是,在函数中修改指针本身所指向的地址,L 不会发生改变,而 &L会发生改变。
首先,* &L是引用类型的指针,代表的是原指针,我们在函数中对指针的操作,都是直接对原指针的