1、引用
引用就是个别名,内存单元的别名,底层以指针的方式来支持引用,在引用使用的地方,系统自带解引用的过程。
int a = 10;
int &b = a;
a和b是同一个内存块
引用的注意事项:
- 引用一定要初始化
- 引用引用的变量要能取地址
- 引用是不可改变的
- 引用只能访问引用变量所以用的内存块的内容
2、new、delete和malloc、free
new和malloc的区别
- malloc只能在堆上开辟,new在自主存取区域开辟
- malloc是函数,new是关键字
- malloc只能开辟内存,new可以开辟并初始化
- 内存不足时,malloc返回空,new抛出异常
- malloc不能开辟常量内存块,new可以开辟
int *p1 = (int*)malloc(sizeof(int)*10);//c语言动态开辟数组
free(p1);
int *p2 = new int[10]; //c++动态开辟数组,10为数组长度
delete[]p2;
int *p3 = new int(10); //c++开辟的同时并且初始化
int *p4 = new int[10](); //c++开辟数组并进行零初始化
delete[]p4;
const int *p5 = new const int(10); //c++中开辟常量内存块
delete p5;
const int *p6 = new const int[10](); //c++开辟常量内存数组,但是此操作毫无意义
//c++中动态开辟二维数组
int **p8 = new int*[10];
for(int i = 0;i < 10;i++)
{
p8[i] = new int[10];
}
for(int i = 0; i < 10; i++)
{
delete[]p8[i];
}
delete[]p8;
//重定位new
int a;
char *p = new(&a)char('a');