您的位置:首页 > 其它

指针⑶,new和delete

2006-12-08 09:22 288 查看
课堂内容:指针⑶,new和delete

重点:
1.内存空间的动态分配:
一般来说,内存分为5个区,从上到下依次为:栈区,空闲区,堆区,代码区,系统区。
或者说可以分为:
┏───┯───┑
│ 代 │ 栈区│
│ 码 │ 堆区│ 敲的累.....
│ 区 │ 全局│
┕───┻───┛
↑ ↑
代码区 数据区

代码区存放程序的执行代码.
栈区存放局部数据区,我们把变量放在这里.
堆区存放动态内存,供程序随即申请使用.
全局数据区存放全局数据、常量、文字量、静态全局量和静态局部量.

注 意:我们为一个指针开辟动态空间,用到new的时候这里是在堆区存放的,但是我们马上要学的函数和指针的关系,指向函数的指针是指向代码区的,这种指针是 函数指针.所以今天的作业里面,我们没在main函数中调用外部函数排序,而是在main函数中直接排序,就是这个道理.

2.malloc/free和calloc/free函数:
这两个函数是在C语言中的,C++中我们使用new和delete来代替.为什么会有这两个函数?老师也只讲了如何使用new和delete,但是这起到什么作用?首先我们来看看什么叫链表.

链表是一种重要的数据结构,是我们动态分配存储的结构.比如说我们知道在定义数组时,我们需要给它一个大小.
int nArr[10] = {0}正确
int nArr[];错误,因为没有给它一个空间大小.
那么我们一开始不知道数组的大小,我们需要输入才知道输入了多少个元素,如果我们定义了100个元素,结果只输入了10个,那么就浪费了很大的空间.在数组中是无法解决这个问题的,我们可以通过链表来解决这个问题.
链表就是一串连接起来的变量.一个连一个,但是这些变量都可以随即在内存中存放,通过指针来进行连接.(具体细节和链表的详细介绍在我们讲了链表操作的时候再写.)链表的优点就是不会浪费内存.

如何来给这个链表开辟空间?在C语言中就要用到malloc/free和calloc/free函数,在C++中要用到new和delete.

3.new和delete的具体使用:
new和delete是操作符,定义的一般形式为:
int* pInt = new int ;
↑ ↑ ↑ ↑
类型名 指针变量 new 类型.

delete pInt
这样就释放掉了空间.
int* pA = new int的几个步骤
第1步,看类型,int或char,用sizeof查看需要开辟什么样的多少长度的空间。
第2步,将正确类型返回到指针。
第3步,按照编译器的规则为指针开辟内存空间。

这里
int* pA = new int ;
*pA = 5;
这两句和
int* pA = new int(5);
是一个效果.

但是这种情况
int* pA = new int[5];
int nArr[5] = {0};

delete pA;//这样的释放是错误的,虽然不报搓,但是很不规范
delete[] pA;//这样才是全部释放
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: