本帖最后由 练就大毅力 于 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()函数返回主函数时是否会回收该内存单元的地址呢? |