传递指针参数时需小心

November 16th, 2008 10:31 PM
如果对指针不太熟悉的话,写起c程序来真是件很痛苦的事情。昨天在写一个链表程序的时候遇到的这个传递指针的问题,在这里分享下,也算是自己做个记录。我要写的是一个双向链表,结构定义如下:
typedef struct dul_node { float data; struct dul_node *prior; struct dul_node *next; } dul_node, *dul_list;
刚开始的时候我初始化的时候是这样写的
int init_dul_list(dul_list list) { list = (dul_list)malloc(sizeof(dul_node)); if(list){ list->prior = list->next = list; //测试数据 ist->data = 99.00; return 1; } else { //内存分配错误 return 0; } }
然后初始化init_dul_list(alist); 但是后来当我想打印一个节点存储的值的时候发现不正确,并没有正确的赋值,我通过gdb跟踪了下,才发现自己犯的这个低级错误。 因为传递的是个指针变量,所以刚开始的时候我以为分配的内存和赋的测试数据都会赋值给alist,仔细找了下才发现,这样做只是将指向malloc得到的新内存的指针赋值给了list,做出改变的也只是list指向的内存,alist指向的内存没有任何变化,于是我改了下程序,在函数外面用malloc得到内存地址,然后把指向这块内存地址的指针传递给init_dul_list,这样就ok啦!
int init_dul_list(dul_list list) { if(list){ list->prior = list->next = list; list->data = 99.00; return 1; } else { return 0; } } dul_list alist = (dul_list)malloc(sizeof(dul_node)); init_dul_list(alist);
我刚学这些东西,有错误或者你有更好的办法,希望大家提出!

链表, c语言

Leave a Reply