c++入门学习----初识 C++中的分区模型
内存的分区模型
代码区
全局区
栈区
堆区
代码区和 全局区 是代码运行之前划分的两个区
代码运行后才有的 栈区和堆区
全局区:
全局变量 静态变量
全局区还包括 常量区 字符串常量 和其他常量都放在这边
该区域的数据在程序结束后由操作系统来释放
全局变量和 静态变量存储的区域 都属于全局区 这两个挨着比较近
常量和 变量存储虽然都是 全局区 但是他们的内存地址 也是有一点点距离
常量 分为 字符串常量 还有 const修饰的常量
const修饰的常量 const修饰的全局常量
const修饰的局部常量 存储的内存位置 和 局部变量存储的位置在一块位置
不在全局区中的 : 局部变量,const修饰的局部常量
在全局区中的 : 全局变量 静态变量 static关键字修饰的静态变量 常量 字符串常量 const修饰的全局变量
栈区 :
是由编译器分配来释放 存放函数的参数值 还有局部的变量等 都会存入到 栈区
局部变量存放在栈区, 栈区的数据在函数执行完后会自动销毁
我们第一次使用拿到的 数据 会保存 但是第二次数据就不再保留了
int* func(int i)
{
i = 100;
int a = 10;
return &a;
}
拿到的这个 &a 指向的数据 就只会保存一次
还有作为方法体的形参 也是存放在栈上的
指针的本质也是局部变量 放在栈上 指针保存的数据是放在堆区上面的
堆区
由程序员分配释放 , 若程序员不释放 程序结束时候 就会由操作系统回收
在c++中主要利用new 在堆区开辟内存
int* func()
{
return new int(10);
}
利用 new 关键字可以创建一个 堆区的数据 new 返回的是该数据类型的指针
创建好了之后 并不是直接把数据给你 而是把堆区创建的地址给你
开辟了堆区的数据
那就需要释放 (delete)释放开辟的数据
我们利用堆区开辟一个数组 我们需要用 一个 数组类型的 *
例子: double * a = new double[10];
因为我们 new 返回的是地址
我们a这时候获取的地址是 double[10] 的首地址
如何给这些赋值.... for循环.....
如果需要释放 在堆区开辟的数组 那就需要
delete [] a;
数组需要 [] 来进行释放;
引用
引用: 给用户起别名 在内存中多一个可访问 数据的输入
语法2: 数据类型 & 别名 = 原名;
***引用重点***
引用必须初始化,引用初始化后不可更改 引用的对象了
引用传递函数参数: void func(int &a,int &b)
引用作为函数的返回值
*注意事项
不要返回局部变量的引用
函数的调用可以作为左值
int& func(){ static int a = 10; return a; }
func()=1000;
这个 返回的 引用a 会为1000;
因为他返回 a的引用 所以这段话可以看成 a=1000;
引用的本质
引用的本质在c++内部实现就是一个指针常量
指针常量是 指针指向不可更改 也就说明了 为什么引用不可以修改
int a =10;
int &ref = a;
这段代码的意思 可以变成
int * const ref = &a ;
ref=20;
这段代码编译器 发现ref是引用 所以转换为
*ref = 20;
常量引用:常量引用主要用来修饰形参, 防止误操作
int & ref = 10// 这个是错误 的 不是正确的
加上const 之后就会正确
const int & ref =10; 这段代码的意思是
int temp = 10; int & ref = temp;
但是加上const之后 我们就限定了 不能复制 变为只读
占位参数: void func(int a, int)
函数重载与c#中的函数重载差不多相同 只讲不同处
函数重载的注意事项***
引用作为重载条件
void func(int &a)
void func (const int &a )
这个是编译可以通过的 类型不同
int a = 10 ;
func(a);
但是他只会调用 void func(int &a)
如果要调用 加了 const的那个代码
就需要在调用的时候 func(10);
为什么 func(10)可以通过
因为 void func(int &a) // int &a = 10 //是不合法的 是错误的
加上const 则为合法的
常量引用的知识点
void func(const int & a ) 就等于 const int &a = 10 //是合法的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】