C++入门资料:https://www.bilibili.com/video/BV1et411b73Z?p=89
最近在学习C++,B站上的黑马视频真的不错,给大家分享一下自己记录的笔记。基本和黑马课件没什么区别,因为自己找不到资源,就自己手打一份
C++程序在执行时,将内存大方向划分为***4个区域***
在程序编译后,生成exe可执行程序,为执行该程序前分为两个区域:
代码区:
存放CPU执行的机器指令
代码区是共享的,共享的目的是对于频繁执行的程序,只需要在内存中有一份代码即可
代码区是只读的
全局区:
全局变量和静态变量存放在此
全局区还包含了常量区,字符串常量和其他常量也存放于此
该区域的数据在程序结束后由操作系统释放
不在全局区的:
局部变量,const修饰的局部变量(局部常量)
在全局区的:
全局变量——定义在函数体外的变量
静态变量——用关键字 static 修饰的变量
字符串常量——使用双引号的字符串,如 “Hello”
全局常量——使用const修饰的全局变量
##1.2 程序运行后
栈区
由编译器自动分配释放,存放函数的参数值、局部变量等
**注意事项:**不要反悔局部变量的地址,栈区开辟的数据由编译器自动释放
堆区
由程序员分配释放,若程序员不释放,程序结束后由操作系统回收。
C++中主要利用new在堆区开辟内存
代码
#include
using namespace std;
// 通过 new 关键字在堆区开辟了一个内存空间,存放int型变量,值为10
// new 关键字将堆区的地址传递给局部指针变量 *p
int* func()
{
//利用new关键字, 可以将数据开辟到堆区
// 指针,本质上是个变量,也是局部变量,放在栈上,指针保存的数据是放在堆区
int *p=new int(10); // 返回一个指针
return p;
}
// 定义一个main函数中的局部指针变量 *p,接受函数func()返回的地址
// 解引用这个地址的时候,他就找到了堆区上面的数据10
int main() {
//在堆区开辟数据
int *p = func();
cout << p << endl;
cout << *p << endl;
return 0;
}
##1.3 new 操作符
C++中利用new操作符在堆区开辟数据
堆区开辟的数据,由程序员手工开辟、手动释放、释放利用操作符 delete
语法: new 数据类型