dynamic.c
这个函数是一个动态链表的建立函数
NODE * creatList()
{
NODE *head,*previous,*current;
current = (NODE *)malloc(sizeof(NODE));
previous = (NODE *)malloc(sizeof(NODE));
printf("please input the value of the first NODE:");
scanf("%d",¤t->value);
previous->value = 0;
head=current;
while(current->value >previous->value)
{
previous = current;
current = (NODE *)malloc(sizeof(NODE));
previous->link = current;
printf("please input the next value:");
scanf("%d",¤t->value);
if(current->value == 0)
{
free(current);
current=NULL;
return head;
}
}
return NULL;
}
test.c
char *test()
{
char * str="123456";
return str;
}
在编译的时候,test.c会报错误,说str属于局部变量,不能作为返回值;所谓的局部变量就表示test()函数执行完之后,会释放str的内存。而createList()则编译通过。
那么问题来了,head同样是在函数内部声明的局部变量,也应该不能作为返回值。
这就要说到程序的动态存储区了。
动态存储区分为堆和栈,局部变量存放在栈区,执行完后自动释放;
而动态分配的内存是存放在堆区,它的释放是依赖于free和delete函数的。
所以head是能够作为函数返回值的。
(注意C的动态内存分配由malloc和free组成;C++由new和delete组成)