#include <iostream>
using namespace std;
//new在堆区开辟数据例子!
//new的基本语法
//在堆区利用new开辟数组
int* func()
{
//在堆区创建整形数据
int* p = new int(10);
//new返回的是该类型的指针
return p;
}
void test01()
{
int* p = func();
cout << *p << endl;
cout << *p << endl;
cout << *p << endl;
delete p;//这里已经释放了指针p的内存(即new操作符开辟的空间),再次访问就是非法操作
}
void test02()
{
//创建10整形数据的数组,在堆区
int* arr = new int[10];//这里创建的是一个数组空间,且不会被堆区释放
for (int i = 0; i < 10; i++)
{
arr[i] = i + 100; //这里arr是指针,[]就相当于解引用了
//也就是:指针arr[i] == *(arr + i)
}
for (int i = 0; i < 10; i++)
{
cout << *(arr + i) << endl;
}
//释放堆区的数组!
delete[]arr; //注意,这里为了使得数组空间得到释放,需要告诉系统,接下来delete的是数组
//所以delete[]arr就可以把int* arr = new int[10]创建的数组信息销毁
//同时,要注意,new返回的类型为一个同类型指针!!!
//所以接收的时候也要注意
//new int 10, 接收:int*; new int[10], 接收 int*arr或者是int (*arr)[10]--数组指针
}
int main()
{
test01();//堆区的数据由程序员管理开辟,也由其释放、
//new操作符可以解决堆区数据释放的问题
//如果想释放堆区数据,用关键字delete来释放
test02();//在堆区开辟一个数组!
cout << endl;
}