C语言函数返回指针问题
今天写代码时想用一个函数返回一个结构体指针,结果出错了,然后做一个总结。
下面是出错的示例:
int *fun( )
{
int a ;
return &a; // 返回局部变量的地直,返回后这个变量已不存在了
}
局部变量是保存在栈中的,随着函数的结束,局部变量也被释放,当函数执行完毕后,指针指向的地址是存在的,但它指向的数据已经不在了。
总结
- 子函数想要返回指针,指针必须指向一个确定的地址,一般有两种
1)静态变量(全局静态或局部静态),这种变量不会随着子函数的结束而被释放,因为它存在静态存储区
2)动态申请的内存,动态申请的内存必须手动释放,也不会随着子函数的结束而被释放。 - 可以采用把指针以形参的方式传递给子函数,以此来获取子函数的执行结果。