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 //是合法的

posted @   Ben-Zxbin  阅读(59)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示