指针⑶,new和delete

课堂内容:指针⑶,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;//这样才是全部释放
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值