首页 > 编程语言 >C++基础知识学习笔记(3)

C++基础知识学习笔记(3)

时间:2024-05-25 14:09:25浏览次数:31  
标签:栈区 int 堆区 局部变量 笔记 基础知识 C++ new main

资料来源

https://www.bilibili.com/video/BV1et411b73Z?p=84&vd_source=cc561849591f6a210152150b2493f6f3

核心内容

程序的内存模型

image

代码区

image

全局区

在函数外面声明了全局变量,在main函数里面创建了局部变量,打印了其地址:

image

image

image

静态变量:在普通变量前面加一个static,属于静态变量。静态变量也属于全局变量。

image

全局区域内有:全局变量、静态变量、常量。
常量有:字符串常量、const修饰的全局变量(全局常量)、const修饰局部变量(局部常量,不放在全局区)。

image

image

栈区

栈区:

  • 由编译器自动分配,存放函数的参数值,局部变量等。
  • 不要返回局部变量的地址,栈区开辟的数据由编译器自动释放。
  • 局部变量、形参等数据会放在栈区。
int* run() {
	int a = 1;
	return &a;
}
int main()
{
	int* a =  run();
	cout << *a << endl;
	cout << *a << endl;
	return 0;
}

image

第一次能打印,是编译器做了保留;第二次就不保留了。

堆区

堆区:

  • 由程序员分配释放,若程序员不释放,则程序结束时由操作系统回收。
  • C++中主要用于new来开辟内存。
int* run() {
	//用new将数据开辟到堆区
	int a = 1;
	//指针变量p放在栈区,但是其指向的数据在堆区
	int* p = new int(10);
	return p;
}
int main()
{
	int* a =  run();
	cout << *a << endl;
	cout << *a << endl;
	return 0;
}

image

new运算符

  • new在堆区开辟数据
  • 开辟的数据需要由程序员手动释放,释放用delete
  • new返回的是开辟的数据在堆区的地址
int main()
{
	int* arr = new int[10];
	for (int i = 0; i < 10; i++) {
		arr[i] = i + 101;
	}
	for (int i = 0; i < 10; i++) {
		cout << arr[i] << endl;
	}
	//释放堆区的数组
	delete[] arr;//必须加[],否则只会释放一个数据

	return 0;
}

发现不加[]时,剩下9个数组元素的值虽然能访问,但是其值变了:
image

标签:栈区,int,堆区,局部变量,笔记,基础知识,C++,new,main
From: https://www.cnblogs.com/redcode/p/18209471

相关文章

  • Minecraft中BossBar、Recipe的底层实现与扩展应用(学习笔记)
    看到有位博主写得很不错,直接上链接:《进度条与自定义合成表》本人在学习这篇博客的基础上进行实践与验证(使用1.12Bukkit接口开发),对上面的文件做几点总结与补充:正如文中所说,一定要记得在插件卸载时对注册的进度条和合成配方进行注销。文中所说的对进度条进行卸载的方法Buk......
  • 深度学习笔记03_pytorch实现天气识别
    ......
  • 算法学习笔记——动态规划.最长上升/下降子序列 2024.5.24
    LanqiaoOJ 773这道题是一道动态规划的题目,主要考察最长上升/下降子序列,难度中等,但是对思维的考察比较重要,特别是如何解决其第二问题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以......
  • 算法学习笔记——深度优先搜索DFS 2024.5.25
    LanqiaoOJ141此题是一道比较经典的搜索题目,这里采用深度优先搜索的方法题目描述X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?......
  • 【C++】回文数判断(for循环,简易思路)
    #include<stdio.h>#include<string.h>#include<iostream>usingnamespacestd;intmain(){chara[1001];intn,i,j;cin>>a;//输入字符串,注意:这里不会处理空格n=strlen(a);/......
  • 使用nrf sniffer抓包笔记
    说明​ 在做BLE开发时候难免会遇到要抓空中包分析问题的情况,这种时候一般要使用抓包器来进行分析。目前来说抓包器比较专业的如Ellisys那种,一台要几十万人民币,用过几次确实牛逼,但是太贵重了。而便宜点的就是用各家平台Dongle做的抓包器,廉价也够用了。早年比较流行的是TICC2540的......
  • C++ const关键字
    C++const关键字记得有次面试carmeraturning岗,面试官让我谈谈const关键字的作用我提到被const修饰变量会存入.rodata的只读数据段不可更改,面试官好像不是很满意,现在想想carmeraturning岗位好像主要用C++,面试官当时是想让我说说C++中const关键字的作用。C++中const关键字的作用......
  • 计算机科学(学习笔记一)
    目录二进制数字存储:字符存储:ASCII(8位)最早的编码标准,他让不同的公司制作的计算机可以相互交换数据(即“互用性”)Unicode统一编码标准(16位)算术逻辑单元(ALU)算术单元:逻辑单元:二进制8位机意味着8位游戏只能有256种颜色,而24位可以有1677万种颜色现在大多计算机使用32/......
  • 【C++】C++异常处理精要:从传统C语言错误处理到现代C++异常机制
    文章目录前言:1.C语言传统的处理错误的方式2.什么是异常处理机制?3.C++异常处理语法3.1.异常抛出(Throw)3.2.异常捕获(Catch)3.3.异常传递(ExceptionPropagation)3.4.异常规范(ExceptionSpecification)3.5.异常安全(Exceptionsafe)4.C++异常处理的最佳实践4.1.只在必......
  • 安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【斌】问了一个Python库安装的问题。求教大佬:华为笔记本,麒麟系统,安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具,再安装打包工具冒出来这个故障,求教这是什么故障?怎么解决呢?二、实现过程这里【......