C/C++之函数返回值为指针或者是引用时常见错误总结
来源:互联网 发布:mac 配置搜狗输入法 编辑:程序博客网 时间:2024/06/13 08:22
1、说明
函数如果是指针或则引用的返回,一般全局变量、局部静态变量、局部动态分配内存的变量可以使用作为函数的返回值,局部变量不行,因为局部变量函数调用完会自动销毁内存,这个时候返回的指针或则引用就有问题了。
2、展示代码
#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;string& f1(const string &s){ static string result = s; return result;} string f2(const string &s){ string result = s; return result;}string &f3(const string &s){ string *p = new string; *p = s; return *p;}int *f4() { int a = 10; return &a;}int *f5(){ static int a = 10; return &a;}int *f6(){ int *a = (int *)malloc(sizeof(int) * 10); *a = 10; *(a + 1) = 11; return a;}int &f7(){ int *a = (int *)malloc(sizeof(int) * 10); *a = 10; *(a + 1) = 11; return *a;}int &f8(){ int a = 10; return a;}int main(){ cout<<"hello word"<<endl; string s("chenyu"); string result = f3(s); cout<<result<<endl; int *a = &f7(); cout<<(*(a + 1))<<endl; free(a); return 0;}
3、编译和运行结果
我们可以看到int *f4()和 int &f8()函数都提示,返回是本地变量,如果你自己亲自运行这几个函数,是会报错的,可以自测。
4、总结
比如,我们看到函数返回的&a,特么我的第一反映是返回 引用,然后函数上面写得是返回指针,日了狗,这不矛盾吗?原来是我搞错了,特么返回&a,就是返回指针,是我基础不怎么好,没有看出来
我们可以看出函数内部局部变量,存储在栈区的变量是不可以当返回值的,因为它由系统分配内存,然后函数调用完后,系统会销毁内存,而且别的进程读到就会报错,这个指针也相当于野指针了,而我们自己用malloc 或者new分配的内存,存在堆区,没有释放之前,别的进程无法使用该区域内存,所以自动分配内存是指针和引用都是可以作为函数返回值的。
0 0
- C/C++之函数返回值为指针或者是引用时常见错误总结
- 返回值为C/C++函数指针的函数
- C函数常见错误:函数返回指向栈内存的指针或引用
- <重拾C++>函数返回值为引用
- C:返回值为指针的函数解读
- C语言函数返回值为指针和函数返回值为void
- c++-引用函数指针
- 函数返回值是const或者const引用
- c函数返回指针
- C函数返回指针
- c函数返回指针
- c函数返回指针
- C指针一个小错误(2)-返回值不能是局部变量的指针
- 函数的返回类型可以为值、指针、引用,这三种返回类型有什么不同,各有什么好处?(c++)
- 返回引用类型的函数指针(c++)
- c/c++返回值为指针、引用时注意的地方
- Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值
- Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值
- 将ARM4412开发板配置成USB网卡,并且使用USB通过Ubuntu上网
- 安装Centos时“sda必须有一个GPT磁盘标签”解决
- (0036) iOS 开发之HTTPS、SSL验证
- React Native按钮详解|Touchable系列组件使用详解
- Android studio 打多渠道包
- C/C++之函数返回值为指针或者是引用时常见错误总结
- 【java】N阶行列式求解
- 使用VS2010开发Qt程序的一点经验
- 12.CentOS7下PostgreSQL安装过程
- 视频学习之旅(一) SurfaceView控件--------------画面重叠问题
- Buffer
- java后台导出excel,客户端下载
- Linux TOP命令 按内存占用排序和按CPU占用排序
- Java 注解