本帖最后由 练就大毅力 于 2010-11-12 09:08 编辑
- //例4.c
- #include <stdio.h>
- #include <stdlib.h>
- typedef int DataType;
- #include "LinkList.h"
- int main(void)
- {
- LinkList A;
- InitList(&A);
- }
- //LinkList.h
- typedef struct Node
- {
- DataType data;
- struct Node *next;
- }ListNode,*LinkList;
- //单链表的初始化操作
- void InitList(LinkList *head)
- {
- //方法一
- if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)
- {
- exit(-1);
- }
- (*head)->next=NULL;
- //方法二
- /*
- ListNode HeadNode;
- (*head)=&HeadNode;
- (*head)->next=NULL;
- */
- }
在这个单链表的InitList的初始化函数中
书上是用malloc函数分配了一块ListNode变量,即头结点的存储单元。并且头指针(*head)指向这个存储单元。。
我想问可不可以用我里面写的方法二,即,直接用ListNode 定义一个头结点变量HeadNode,然后用取地址运算符取它的地址,将这个地址赋值给头指针(*head)??
能不能这样做??
因为,调用InitList()函数,返回主函数时,里面的变量都是局部变量,系统会收回里面的局部变量动态分配的内存。按道理,方法二 是行不通的。。但是,用malloc函数也是动态分配的内存单元,那么InitList()函数返回主函数时是否会回收该内存单元的地址呢?
|