链栈初始化问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 21:35:14
typedef struct node
{int data;
struct node *next;
}linkstack;
int initstack(linkstack **S)
{*S=(linkstack*)malloc(sizeof(linkstack));
if(*S==NULL) return 0;
(*S)->next=NULL;
return 1;
}
这里的链栈初始化时为什么要用到二级指针,其中每一行的意思我也不怎么懂,请高手帮帮忙细解
还不是很懂,能再详细点吗?我是刚学的

malloc的原型是:void *malloc(unsigned int size);返回的是类型为void的指针,而*s是linkstack的指针,所以用强制转换,用(linkstack*)而不是linkstack*。
linkstack **S相当于linkstack *(*S)那么就是指针变量S是指向一个字符指针变量。S的内容是一个地址,而*S是强制转换后的linkstack类型的指针也就是一个地址,S 就的指向这个指针的指针。用S指向linkstack类型的指针,然后*S当然就是操作着个链表的指针了啊!
我觉得好象在这里没有必要用二级指针。因为都去掉一个*,程序也可以嘛,没有什么不可以的地方,再做几个*也没有错。可能为了与其他地方保持统一吧,因为我的数据结构还没有看完。

由于是链表,所以需要动态的分配空间。
因为要动态分配,这个时候首先就需要一个指针了,才能去malloc
这个时候你用一个函数去初始化这个链表,这个时候需要传递一个指针给这个函数,这个时候,自然那个参数就是 指针的指针 了