关于 C/C++ 中函数能否返回指针的问题
时间:2021-08-31
本文章向大家介绍关于 C/C++ 中函数能否返回指针的问题,主要包括关于 C/C++ 中函数能否返回指针的问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
刚才在看 C++ Primer 发现在函数那一章讲函数返回值时, 对于返回值能否是引用或指针的问题进行了解答. 但是描述的不是很具体, 在翻阅了一些博客后在此做个简单的笔记
结论 : 函数能否返回指针, 取决于指针指向对象的状态.
1. 指针如果指向一个局部变量, 那么函数执行完毕后返回的值是不确定的.
#include <cstdio>
using namespace std;
int *back()
{
int x = 1;
int *p = &x;
return p;
}
int *BACK()
{
int x = 2;
int *p = &x;
return p;
}
int main(void)
{
int *p = back();
printf("%d\n", *p); // 输出1
int *q = BACK();
printf("%d\n", *p); // 输出2
return 0;
}
2. 如果指针指向的值为静态变量, 或者是堆上的一块空间, 那么函数执行完毕后其变量值或所在内存区域依然存在.
#include <cstdio>
#include <cstdlib>
using namespace std;
int *back()
{
static int x = 1;
int *p = &x;
return p;
}
int *BACK()
{
int x = 2;
int *p = &x;
return p;
}
int *heap()
{
int *p = (int *)malloc(sizeof(int));
return p;
}
int *HEAP()
{
int *p = (int *)malloc(sizeof(int));
return p;
}
int main(void)
{
int *p = back();
printf("%d\n", *p); //输出 1
int *q = BACK();
printf("%d\n", *p); //输出依然是 1
p = heap();
printf("%p\n", p); //输出00000000001c13f0
q = HEAP();
printf("%p\n", p); //输出依然是00000000001c13f0
return 0;
}
原文地址:https://www.cnblogs.com/ICeVe/p/15209778.html
- 提高Spark姿势水平 No.73
- 好好玩的螺旋算法No.69
- linux学习第四十篇:访问日志不记录静态文件,访问日志切割,静态元素过期时间
- linux学习第四十一篇:配置防盗链,访问控制Directory,访问控制FilesMatch
- linux学习第四十二篇:限定某个目录禁止解析php, 限制user_agent,PHP相关配置
- 简易但不简单的配置中心No.79
- linux学习第四十三篇:LNMP架构介绍,mysql安装,php安装,Nginx介绍
- linux学习第四十四篇:Nginx安装,Nginx默认虚拟主机,Nginx域名重定向
- linux学习第四十二篇:PHP扩展模块安装
- linux学习第四十五篇:Nginx访问日志,Nginx日志切割,静态文件不记录日志和过期时间
- 合格的配置中心应有的素养No.76
- linux学习第四十六篇:Nginx防盗链,Nginx访问控制,Nginx解析php相关配置,Nginx代理
- linux学习第四十七篇:Nginx负载均衡,ssl原理,生产ssl密钥对,Nginx配置ssl
- linux学习第四十八篇:php-fpm的pool,php-fpm慢执行日志,定义open_basedir,php-fpm进程管理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP微信发送推送消息乱码的解决方法
- php实现微信企业付款到个人零钱功能
- 如何解决安装python3.6.1失败
- Python读取Excel数据并生成图表过程解析
- 解决keras模型保存h5文件提示无此目录问题
- 如何基于Python代码实现高精度免费OCR工具
- python怎么调用自己的函数
- Python datetime模块使用方法小结
- PHP hebrev()函数用法讲解
- PHP hex2bin()函数用法讲解
- PHP+jQuery实现即点即改功能示例
- PHP html_entity_decode()函数讲解
- PHP下载大文件失败并限制下载速度的实例代码
- thinkphp5框架实现的自定义扩展类操作示例
- python导入库的具体方法