intmain
内存分区模型
代码区:存放函数的二进制代码,有操作系统进行管理的
全局区:存放全局变量和静态变量以及常量
栈区:由编译器自动分配与释放,存放函数的参数值,局部变量等
堆区:由程序员分配和释放,若程序员不释放,则在程序接收的时候由操作系统回收
内存机制:
c++ 中在程序运行前分为全局区和代码区
代码区的特点是共享和只读
全局中存放全局变量、静态变量、常量
常量去中存放const修饰的全局常量和字符串常量
全局区:
全局变量(int a = 10;),静态变量(static int a = 10;),常量(字符串常量以及const修饰的变量:(const修饰全局变量 以及 const修饰的局部变量:不在全局区))
程序运行后
栈区 :存放函数的参数值,局部变量
注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放
不要返回局部变量的地址
int * func(){
int a = 10; //局部变量,存放在栈区,栈区的数据在函数执行完后自动释放
return &a;
}
堆区:堆区开辟数据
int * func(){
//利用new 关键字 可以将数据开辟到堆区
int * p =new int(10);
// new int (10) 返回的是地址
//int a = 10; //局部变量,存放在栈区,栈区的数据在函数执行完后自动释放
return p;
}
1、new 的基本语法
int * func (){
//在对去创建整型数据
//new返回的是 该数据类型的指针
int * P= new int(10);
return p;
}
void test01(){
int * p = func();
cout << *P <<endl;
//堆区的数据由程序员管理开辟,程序员管理释放
//如果想释放堆区的数据,利用关键字delete
delete p;
}
2、堆区利用new 开辟一个数组
void test02(){
//创建10整型数据的数组,在堆区(new 返回的是一串连续数组地址空间)
int * arr =new int[10];
for (int i= 0; i<10;i++){
arr[i] = i +100;
}
for(int i = 0 ;i< 10;i++){
cout << arr[i] <<endl;
}
//释放堆区的数组
delete [] arr
//释放数组的时候,需要加上[]
}