IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【C++核心编程】黑马程序员学习笔记(未完)(更新于2021/9/23) -> 正文阅读

[Java知识库]【C++核心编程】黑马程序员学习笔记(未完)(更新于2021/9/23)


一、内存

???1.1 内存四区

C++程序在执行时,将内存大致分为4个区域:代码区,全局区,栈区,堆区

  • 代码区:存放函数体的的二进制代码,操作系统管理。

?????🔵特点:①共享 :对于频繁被执行的程序,只需要在内存中有一份代码即可。
? ? ? ? ? ? ? ? ????②只读:目的是防止程序意外地修改了它的指令。

  • 全局区:存放全局变量、静态变量和常量(除了const修饰的局部变量)。程序结束时由操作系统释放。
//全局变量
int g_a = 10;
const int c_g_a = 10;
int main()
{
	int l_a = 10;
	//静态变量
	static int s_a = 10;
	
	//常量:字符串常量/const修饰的变量(全局/局部变量)
	const char* a = "hello";
	const int c_l_a = 10;

	cout << "局部变量l_a的十进制地址为:" << (int)&l_a << endl;
	cout << "全局变量g_a的十进制地址为:" << (int)&g_a << endl;
	cout << "静态变量s_a的十进制地址为:" << (int)&s_a << endl;
	cout << "字符串常量a的十进制地址为:" << (int)a << endl;
	cout << "const修饰的全局变量c_g_a的十进制地址为:" << (int)&c_g_a << endl;
	cout << "const修饰的局部变量c_l_a的十进制地址为:" << (int)&c_l_a << endl;
	return 0;

}

在这里插入图片描述

  • 栈区:存放函数的参数值、局部变量。由编译器自动分配和释放。

?????🔴注意:不要返回局部变量的地址。

int* funcation()
{
	int a = 10;//存放在栈区,栈区的数据在函数执行完后自动释放
	return &a;
}
int main()
{
	int* p = funcation();
	cout <<"局部变量a的值为:"<< *p << endl;  //第一次正常打印,因为编译器做了保留
	cout << "局部变量a的值为:" << *p << endl;
	return 0;
}

在这里插入图片描述

  • 堆区:由程序员分配(new)和释放(delete),若程序员不释放,程序结束时由操作系统回收。
int* funcation()
{
	//new关键字,可以将数据开辟到堆区上
	//指针本质上也是局部变量,存放在栈区上,但是保存的数据在堆区
	int* p = new int(10);
	return p;
}
int main()
{
	int* p = funcation();
	cout << *p << endl;
	cout << *p << endl;
	return 0;
}

在这里插入图片描述

Tip:

  • 程序运行前分为:代码区,全局区
  • 程序运行后分为:栈区,堆区

[注]: 关于内存更详细的知识👉深度剖析数据在内存中的存储👉几分钟让你了解什么是函数栈帧的创建和销毁

???1.2 new操作符

//new的基本用法
int* p = new int(10);//在堆区创建整型变量,返回该变量的地址
delete p;//释放
int* parr = new int[10];//在堆区创建一个元素为10的整型数组,返回数组首元素的地址
delete[] arr;//释放一个数组 

测试delete

int* funcation()
{
	int* p = new int(10);
	return p;
}
int main()
{
	int* p = funcation();
	cout << *p << endl;
	cout << *p << endl;
	delete p;
	cout << *p << endl;
	return 0;
}

二、引用

???2.1 引用基本使用和注意事项

??? ???作用:给变量起个别名。
??? ???语法数据类型 & 别名=原名

//eg.
int a = 10;
int& b = a;

??? ???注意
????????????①引用必须初始化。
????????????②引用一旦初始化就不可以更改了。

	//①引用必须初始化
	int a = 10;
	int& b;//错了!!!

	//②引用一旦初始化就不可以更改了
	int a = 10;
	int c = 20;
	int& b = a;
	int& b = c; //错了!!!

???2.2 引用做函数参数

???

??????

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:24:23  更:2021-09-24 10:26:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:52:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码