C++内存,引用与函数进阶
一内存分区1.代码区程序运行前分的区存放函数的二进制代码由操作系统管理的。特点:1.共享共享的目的是对一些频繁被执行的程序只需要在内存中有一份代码即可。2.只读目的是防止程序意外的修改了它的指令。2.全局区程序运行前分的区全局变量和静态变量static关键词存放在这里。 还包含了常量区字符串常量和全局常量const修饰的全局变量也存放在这里。特点该区域的数据在程序结束后是由操作系统释放的。3.栈区程序运行后分的区由编译器自动分配释放存放函数的参数值局部变量等。注不要返回局部变量的地址栈区开辟的数据由编译器自动释放。#include iostream using namespace std; int* func() { int a 10; //栈区的局部变量 return a; } int main() { int* p func(); cout *p endl; cout *p endl; return 0; }第一个值为10因为编译器作了保留第二次就不会保留了值为乱码。4.堆区程序运行后分的区由程序员分配释放若程序员没有释放程序结束时由操作系统回收。利用new将数据开辟到堆区结束时用delete来释放。#include iostream using namespace std; int* func() { int* arr new int(10); //指针本质是局部变量存放在栈上而指针保留的数据存放在堆区 return arr; } //创建数组 void test() { int* arr new int[10]; for (int i 0; i 10; i) arr[i] i 100; for (int i 0; i 10; i) cout arr[i] endl; delete[] arr; } int main() { test(); int* p func(); cout *p endl; cout *p endl; delete(p); return 0; }二引用1.引用的基本使用作用给变量起别名语法数据类型 别名原名2.引用的注意事项引用必须初始化。引用一旦初始化后就不可以更改了。3.引用做函数参数作用函数传参时可以利用引用的技术让形参修饰实参。优点可以简化指针修改实参引用的语句更清楚简单。#include iostream using namespace std; //1.值传递 void swap1(int a, int b) { int temp a; a b; b temp; } //2.地址传递 void swap2(int* a, int* b) { int temp *a; *a *b; *b temp; } //3.引用传递 void swap3(int a, int b) { int temp a; a b; b temp; } int main() { int a 10, b 20; //swap1(a, b); //形参不会修饰实参 //swap2(a, b);//形参会修饰实参 swap3(a, b);//形参会修饰实参 cout a a endl; cout b b endl; return 0; }4.引用做函数返回值作用引用是可以作为函数的返回值存在的用处函数调用作为左值5.引用的本质引用的本质在c内部实现是一个指针常量。6.常量引用作用常量引用主要用来修饰形参防止误操作。在函数行参列表中可以加const修饰形参防止形参改变实参。#include iostream using namespace std; void show(const int a) { //a 1000;//此时不可对a进行修改会报错 cout a a endl; } int main() { int a 100; //此时编译器将代码修改为int temp10;const int arrtemp; //const int arr 10; show(a); return 0; }三函数提高1.函数默认参数在c中函数形参列表中的形参是可以有默认值的。语法函数类型 函数名参数 默认值{}如果在有默认值的情况下还传了数据那么函数就会用我们传的数据。注:①如果某个参数有默认值那么从这个参数以后的每个参数都要有默认值。②函数声明和函数实现只能有一个可以有默认值。如果都有会有二义性2.函数的占位参数用来占位函数调用必须填补该位置。语法函数类型 函数名数据类型{}3.函数重载作用函数名可以相同提高复用性。函数重载满足的条件同一个作用域下函数名相同函数参数类型个数或顺序不同#includeiostream using namespace std; //1.个数不同 void func1(int a) { cout func1(int a) endl; } void func1(int a, int b) { cout func1(int a,int b) endl; } //2.顺序不同 void func2(int a, double b) { cout func2(int a,double b) endl; } void func(double a, int b) { cout func2(double a,int b) endl; } //3.类型不同 void func3(int a) { cout func3(int a) endl; } void func3(double a) { cout func3(double a) endl; } int main() { int a 10, b 20; double c 3.14; func1(a); func1(a, b); cout endl; func2(a, c); func2(c, a); cout endl; func3(a); func3(c); return 0; }注函数的返回类型不可以做重载条件。注意事项1.引用作为重载条件当传入10时int a10不合法所以不会调用func(int a),而是调用func(const int a).2.函数重载碰到默认参数此时会存在二义性尽量避免这种写法。

相关新闻

Linux 驱动开发与 Raspberry Pi

Linux 驱动开发与 Raspberry Pi

系统信息 Linux hxkj 6.18.34rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.18.34-1rpt1 aarch64 GNU/LinuxRaspberry Pi OS (64-bit) A port of Debian Trixie with the Raspberry Pi Desktop (2026-06-09) 一、资料 1、Linux Driver Development with Raspberry PiPractical Labs&…

2026/7/4 4:30:12 阅读更多 →
UVa 535 Globetrotter

UVa 535 Globetrotter

题目描述 题目要求计算地球表面上两个城市之间的球面距离(大圆距离)。地球被视为半径为 637863786378 km\texttt{km}km 的完美球体。输入包含城市列表和查询列表,每个查询输出两个城市之间的距离(四舍五入到整数)&…

2026/7/4 4:28:11 阅读更多 →
hwinfo硬件信息库:跨平台系统监控的C++现代化解决方案

hwinfo硬件信息库:跨平台系统监控的C++现代化解决方案

hwinfo硬件信息库:跨平台系统监控的C现代化解决方案 【免费下载链接】hwinfo cross platform C library for hardware information (CPU, RAM, GPU, ...) 项目地址: https://gitcode.com/gh_mirrors/hw/hwinfo hwinfo是一款专为C开发者设计的跨平台硬件信息采…

2026/7/4 4:28:11 阅读更多 →

最新新闻

Maven仓库管理:本地、中央和私有仓库的配置与使用

Maven仓库管理:本地、中央和私有仓库的配置与使用

Maven仓库管理:本地、中央和私有仓库的配置与使用 【免费下载链接】maven Apache Maven core 项目地址: https://gitcode.com/GitHub_Trending/ma/maven Apache Maven作为Java项目构建和依赖管理的核心工具,其仓库管理系统是项目成功的关键。本文…

2026/7/4 5:44:37 阅读更多 →
终极MSEdgeRedirect完全指南:如何快速重定向Edge链接到默认浏览器

终极MSEdgeRedirect完全指南:如何快速重定向Edge链接到默认浏览器

终极MSEdgeRedirect完全指南:如何快速重定向Edge链接到默认浏览器 【免费下载链接】MSEdgeRedirect A Tool to Redirect News, Search, Widgets, Weather and More to Your Default Browser 项目地址: https://gitcode.com/GitHub_Trending/ms/MSEdgeRedirect …

2026/7/4 5:42:36 阅读更多 →
CANN / asc-devkit: asc_loadalign_brc_elem BRC搬入API

CANN / asc-devkit: asc_loadalign_brc_elem BRC搬入API

asc_loadalign_brc_elem 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https:/…

2026/7/4 5:42:36 阅读更多 →
Krea-2 Turbo模型三分钟选择指南:bf16、fp8、nvfp4哪个最适合你?

Krea-2 Turbo模型三分钟选择指南:bf16、fp8、nvfp4哪个最适合你?

Krea-2 Turbo模型三分钟选择指南:bf16、fp8、nvfp4哪个最适合你? 【免费下载链接】Krea-2 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/Krea-2 你是否在使用AI绘图时感到困惑,面对Krea-2 Turbo提供的多种模型格式不知如何…

2026/7/4 5:40:35 阅读更多 →
实战指南:如何用Rust高效构建Lua解释器类型系统与内存管理

实战指南:如何用Rust高效构建Lua解释器类型系统与内存管理

实战指南:如何用Rust高效构建Lua解释器类型系统与内存管理 【免费下载链接】build-lua-in-rust 《用Rust实现Lua解释器》 / _Build a Lua Interpreter in Rust_ 项目地址: https://gitcode.com/gh_mirrors/bu/build-lua-in-rust 想要深入理解编程语言解释器的…

2026/7/4 5:38:35 阅读更多 →
终极硬盘清理指南:用Krokiet轻松找回丢失的存储空间

终极硬盘清理指南:用Krokiet轻松找回丢失的存储空间

终极硬盘清理指南:用Krokiet轻松找回丢失的存储空间 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 还在为电脑硬盘空间不足而烦恼吗&a…

2026/7/4 5:36:34 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻