资讯专栏INFORMATION COLUMN

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

zhongmeizhi / 1362人阅读

摘要:只读目的是防止程序意外地修改了它的指令。全局区存放全局变量静态变量和常量除了修饰的局部变量。程序结束时由操作系统释放。由编译器自动分配和释放。注意不要返回局部变量的地址。


一、内存

   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 引用做函数参数

   

      

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/120963.html

相关文章

  • 黑马C++提高编程笔记未完

    摘要:文章目录模板模板的概念函数模板函数模板语法函数模板注意事项函数模板案例普通函数与函数模板的区别普通函数与函数模板的调用规则模板的局限性类模板类模板语法类模板与函数模板区别类模板中成员函数创建时机类模板对象做函数参数类模 ...

    Jenny_Tong 评论0 收藏0
  • 系统地学习C++

    摘要:本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到的函数和结构,也会学习到它们的设计目的和基本原理。因此我们把精力集中在最有价值的地方。本书不仅是对模板的权威解释,而且本书还深入地介绍了其他一般的思想。 C++ 入门教程(41课时) - 阿里云大学 C+...

    joyqi 评论0 收藏0
  • 编程语言排行榜迎来历史性时刻!C语言和Java均败了!

    摘要:持续更新多年的编程语言排行榜,迎来了一个历史性时刻第一次拥有一个新的领导者编程语言。黑马程序员推出课程体系,除了个月的大纲课程学习以外,同时提供个月课程内容的在线学习提供给毕业之后进入工作岗位的学员继续学习。 ...

    philadelphia 评论0 收藏0
  • 初学者福音!可能是最适合你的Java学习路线和方法推荐。

    摘要:学习完多线程之后可以通过下面这些问题检测自己是否掌握,下面这些问题的答案以及常见多线程知识点的总结在这里。可选数据结构与算法如果你想进入大厂的话,我推荐你在学习完基础或者多线程之后,就开始每天抽出一点时间来学习算法和数据结构。 我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 35k+ Star。会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://...

    yanest 评论0 收藏0
  • 我是如何学习游戏引擎的?

    摘要:下面列举了游戏开发中常见的岗位以及两条常见的协作开发的流水线其实学习游戏引擎,前期对于任何岗位来说路线都是相似的,基本上就是一个熟悉基本操作理解基本概念拓展专业知识的过程。当然这不是绝对的,任何引擎的开始阶段和大成阶段都是相似的。 这是【游戏开发那些事】第51篇原创 前言:游戏引擎,表面...

    未东兴 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<