user-0 提问: 菜鸟求助，linux下的c语言链表实现初始化

回复:
user: user-1
content: 你主函数内的K指针，指向的是未知区域，你在init_Linklist函数里直接解引用*L自然会报错 而且你主函数里Link_list *K;这样用意味着K是二级指针，也不对，写成下面这样就可以了：  typedef struct Link_node { 	int data; 	struct Link_node * next; }node,*Link_list;  void init_Linklist(Link_list *L) {      	*L = (Link_list )malloc(sizeof(node));      	(*L)->data=0; 	(*L)->next=NULL; } void main() { 	Link_list K; 	init_Linklist(&K); }

user: user-2
content: 楼主你看这样行不行，行的话给我２分吧，我下载个资料 typedef struct Link_node {         int data;         struct Link_node * next; } node_t ;  node_t  *Link_list  = NULL;  node_t *alloc_list_node(int data) {           node_t *p;       p = calloc(sizeof(node_t), 1);            p->data = data;      return p; }  int main(void) {    node_t *node;     node = alloc_list_node(10);    node->next = Link_list;    Link_list = node;     return 0; }

user: user-2
content: 随便回一贴能得积分么？

user: user-3
content: 眼尖是码农的基本遗传本能。  关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-1
content: 引用 7 楼 icesky1stm 的回复:[quote=引用 6 楼 qq423399099 的回复:] [quote=引用 4 楼 icesky1stm 的回复:] [quote=引用 1 楼 qq423399099 的回复:] 你主函数内的K指针，指向的是未知区域，你在init_Linklist函数里直接解引用*L自然会报错 而且你主函数里Link_list *K;这样用意味着K是二级指针，也不对，写成下面这样就可以了：  typedef struct Link_node { 	int data; 	struct Link_node * next; }node,*Link_list;  void init_Linklist(Link_list *L) {      	*L = (Link_list )malloc(sizeof(node));      	(*L)->data=0; 	(*L)->next=NULL; } void main() { 	Link_list K; 	init_Linklist(&K); }   K已经在栈中分配内存了，在*K无法改变它的地址吧。[/quote] K指针本身确实已经分配了栈内存，但是它此时指向的是位置区域（存的是垃圾值） 不知道你想说啥[/quote]  哎，我说我刚才眼花了，你会鄙视我不[/quote] 必须会

user: user-4
content: 引用 6 楼 qq423399099 的回复:[quote=引用 4 楼 icesky1stm 的回复:] [quote=引用 1 楼 qq423399099 的回复:] 你主函数内的K指针，指向的是未知区域，你在init_Linklist函数里直接解引用*L自然会报错 而且你主函数里Link_list *K;这样用意味着K是二级指针，也不对，写成下面这样就可以了：  typedef struct Link_node { 	int data; 	struct Link_node * next; }node,*Link_list;  void init_Linklist(Link_list *L) {      	*L = (Link_list )malloc(sizeof(node));      	(*L)->data=0; 	(*L)->next=NULL; } void main() { 	Link_list K; 	init_Linklist(&K); }   K已经在栈中分配内存了，在*K无法改变它的地址吧。[/quote] K指针本身确实已经分配了栈内存，但是它此时指向的是位置区域（存的是垃圾值） 不知道你想说啥[/quote]  哎，我说我刚才眼花了，你会鄙视我不

user: user-1
content: 引用 4 楼 icesky1stm 的回复:[quote=引用 1 楼 qq423399099 的回复:] 你主函数内的K指针，指向的是未知区域，你在init_Linklist函数里直接解引用*L自然会报错 而且你主函数里Link_list *K;这样用意味着K是二级指针，也不对，写成下面这样就可以了：  typedef struct Link_node { 	int data; 	struct Link_node * next; }node,*Link_list;  void init_Linklist(Link_list *L) {      	*L = (Link_list )malloc(sizeof(node));      	(*L)->data=0; 	(*L)->next=NULL; } void main() { 	Link_list K; 	init_Linklist(&K); }   K已经在栈中分配内存了，在*K无法改变它的地址吧。[/quote] K指针本身确实已经分配了栈内存，但是它此时指向的是位置区域（存的是垃圾值） 不知道你想说啥

user: user-4
content: #include <stdio.h>                                                                                                                                                                            #include <stdlib.h> #include <string.h>  typedef struct Link_node {     int data;     struct Link_node * next; }node,*Link_list;  void init_Linklist(Link_list *L) {     Link_list p;     p=(Link_list )malloc(sizeof(node));     *L=p;     p->data=0;     p->next=NULL; }; void main() {     Link_list K;     init_Linklist(&K);     printf("p->data[%d]\n", K->data); }

user: user-4
content: 引用 1 楼 qq423399099 的回复:你主函数内的K指针，指向的是未知区域，你在init_Linklist函数里直接解引用*L自然会报错 而且你主函数里Link_list *K;这样用意味着K是二级指针，也不对，写成下面这样就可以了：  typedef struct Link_node { 	int data; 	struct Link_node * next; }node,*Link_list;  void init_Linklist(Link_list *L) {      	*L = (Link_list )malloc(sizeof(node));      	(*L)->data=0; 	(*L)->next=NULL; } void main() { 	Link_list K; 	init_Linklist(&K); }   K已经在栈中分配内存了，在*K无法改变它的地址吧。

user: user-4
content: typedef struct Link_node {         int data;         struct Link_node * next; }node,*Link_list;  void init_Linklist(Link_list **L) {            Link_list p;       p=(Link_list )malloc(sizeof(node));             *L=p;       p->data=0;       p->next=NULL; }; void main() {    Link_list *K;    init_Linklist(&K); }

user: user-0
content: 问题解决，十分感谢！ 函数里不能用P=*L代替（*L）也是因为没有明确指针指向吗？