原博客地址:http://blog.csdn.net/zhanghaotian2011/article/details/7765650
typedef struct LNode{ // Singly linked list Node
int data;struct LNode *next; // Pointer to next node
}LNode,*LinkList;
int ListInsert_L(LinkList &L, int i, int e)
{ LinkList s,p;
int j;
p = L; j = 0;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1) return 0;
s = (LNode *)malloc(sizeof(LNode));
if(!s) return 0;
s->data = e;
s->next = p->next; p->next = s;
return 1; }
typedef struct LNode LNode;
typedef struct LNode *LinkList;
第一个好理解,是为struct LNode 创建一个简单的别名,以后就用LNode代替它了。
那第二个理解成什么呢?我开始就理解成了指向这个LNode的指针LinkList.
但是这个函数调用里面吧,却把LinkList当成了一个别名或者一个类型,那是不是理解成因为有了typedef就创建了一个LinkList指针代表所有指向这个结构的指针。
后在百度知道里面找到了答案,证明我的猜测是正确的:
typedef struct { ... }*Pstr; 这个指针怎么用法?
第二个疑惑:
insert函数里面为什么有个地址符,后来经过程序调试后,我觉得有没有这个地址符没有任何影响,因为本身L就被定义了是LinkList型的也就是说它指向的是这个结点结构的指针,里面本身存在的就是个地址,然后直接赋值给p。
地址符的作用应该是传进地址,如果说改成这样的int ListInsert_L(LinkList *L, int i, int e) 那么等于就是说L应该是指针的地址,调用的时候应该用&,而在里面赋值的时候应该是 p = *L;