返回局部变量和指针
来源:互联网 发布:linux增加空间 编辑:程序博客网 时间:2024/05/17 01:08
返回局部变量时,函数将值复制保存给调用者,函数执行完毕后内存空间被释放;
返回指针时,函数返回的地址,但是此时地址空间已经被释放,已经得不到值,所以会有错误;
#include <stdio.h>
#include <string.h>
char* get_str(void)
{
char* str = "abcd";
return str;
}
int main(int argc, char* argv[])
{
char* p = get_str();
printf("%s\n", p);
return 0;
}
上述代码中,str是局部变量,函数返回后应该释放掉了,但为什么get_str返回后,还能正常输出呢?
#include <string.h>
char* get_str(void)
{
char* str = "abcd";
return str;
}
int main(int argc, char* argv[])
{
char* p = get_str();
printf("%s\n", p);
return 0;
}
上述代码中,str是局部变量,函数返回后应该释放掉了,但为什么get_str返回后,还能正常输出呢?
char *str="abcd"; 这种方式内存分配在静态存储区,str指向"abcd"这一字符串常量,get_str()函数返回指向这一字符串常量的地址的指针,所以会有main中的打印结果
字符串常量的地址是存放在局部变量str中的,get_str()返回后这个局部变量str被释放了,怎么会有正确结果呢?
打个比方:
阿四知道CU网站的地址。
阿三打电话给(call)阿四,“阿四,告诉我CU网站的地址”
阿四告诉阿三CU网站的地址后就跑掉了,阿四不见了,但CU网站还在。
阿三知道了CU网站的地址,也就找到了CU网站。
阿四知道CU网站的地址。
阿三打电话给(call)阿四,“阿四,告诉我CU网站的地址”
阿四告诉阿三CU网站的地址后就跑掉了,阿四不见了,但CU网站还在。
阿三知道了CU网站的地址,也就找到了CU网站。
返回局部指针不正确,但如果局部指针指向静态区常量还是不会出错的
————————————————————————————————————————————————
一般的来说,函数是可以返回局部变量的,函数一般的操作是吧局部变量复制后返回给调用者,不能返回局部变量的是指针,因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。但是其他的值都是没问题的,其实都是一样的东西,只是指针在这种情况下被混淆了。
局部变量的作用域只在子函数内,在返回后,局部变量的内存已经释放。所以,如果是值的话,不涉及地址,程序不会出错。但是,如果是地址的话,程序会在运行后出错!有时候这个错误不会在运行时马上出现,但是这个错误始终是潜在的风险!
0 0
- 返回局部变量和指针
- 返回局部变量指针
- 返回局部变量指针
- 返回局部变量指针
- 返回局部变量指针
- 返回局部指针变量
- 返回局部指针变量
- 返回局部指针变量
- 返回局部指针变量
- 局部变量和局部指针
- 关于局部指针变量和数组的操作返回值
- 返回函数局部变量的指针和引用
- 关于C语言中返回局部变量和局部指针变量
- 关于C语言中返回局部变量和局部指针变量
- 不要返回指向局部变量的指针
- 对于返回局部指针变量的思考
- 函数不能返回局部指针变量
- c++返回局部变量的指针
- DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架.
- oj(一)u
- 设计模式六大原则1-单一职责原则
- 深入浅出 - Android系统移植与平台开发(八)- Android系统的本地服务
- touch事件需要注意的
- 返回局部变量和指针
- [Android4.4.3] Nubia Z5S Mokee4.4.3 RC2.0 by syhost
- 链接器脚本
- oj(一)v
- Ajax发送请求数据步骤
- JX8NET团队正式启用项目管理软件 DotProject
- windows7登陆smb用户名不存在
- oj(一)w
- HQL语句总结