这一章其实也就讲了一下内存的具体情况,我觉得一般般,不是很深入,都是些表面
1.如何描述内存
我们通常描述一个指针,都是说它指向一个内存.但是其实, 指针本身就是在栈里面而已
栈 ————————————堆
ptr————————————*ptr
这个是什么意思呢,就是指针只是一个变量而已,它既可以存在于栈中,也可以存在于堆中.
栈: int *ptr = new int;
堆: int *ptr; *ptr=new int; ptr= new int;
多数我们定义栈的指针, 我们只是让这个栈里面的指针指向堆里面的内容而已
2. new和malloc的区别
new的话,除了分配合适大小的内存外, 还会调用该对象的默认构造函数, 并且成功后返回一个指向该内存的指针.在new失败的同时,会抛出一个异常
malloc的话, 就只会分配固定大小的内存.
相对应的:
delete的话会自动调用该对象的析构函数.
free的话 什么只是清理该内存而已.!!!
3.”构造”动态数组 and “析构”动态数组
我们在栈内构造数组通常这样
int array[10];//
int array[10][10];//
相对应 在堆内
int *array = new int[5];//13
但是二维的时候,1因为申请的内存不是连续的,所以不能用int **array = new int[10][10]
所以我们必须先申请第一维的数组长度, 然后再从第一维里面的每个元素里面申请第二维的数组长度.
int **array = new int[10];
for(int i=0;i<10;i++){
array[i] = new int[10];//
}
2