77范文网 - 专业文章范例文档资料分享平台

第20章 指针 二 为指针分配和释放空间

来源:网络收集 时间:2021-09-24 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

白话C++

第二十章指针二为指针分配和释放空间

20.1 理解指针的两种“改变”

20.1.1 改变指针的值

20.1.2 改变指针所指的变量的值

20.1.3 两种改变?一种改变?

20.2 C++ 方式的内存分配与释放 new 和 delete

20.2.1 new

20.2.2 在new 时初始化内存的值

20.2.3 delete

20.2.4 实验: new 和 delete

20.2.5 new 和 delete 的关系

20.3 new [] 和 delete []

20.3.1 new[] / delete[] 基本用法

20.3.2 new []/ delete[] 示例

20.3.3 详解指向连续空间的指针

20.4 delete/delete[] 的两个注意点

20.4.1 一个指针被删除时,应指向最初的地址

20.4.2 已释放的空间,不可重复释放

20.5 C 方式的内存管理

20.5.1 分配内存 malloc 函数

20.5.2 释放内存 free 函数

20.5.3 重调空间的大小: realloc 函数

20.5.4 malloc、realloc、free的例子

20.1 理解指针的两种“改变”

普通变量(非指针,简单类型变量)只能改变值:

1) int a = 100;

2) ...

3) a = 200;

白话C++

第 1 行代码,声明int类型变量a,并且初始化a的值为100。

到第 3 行代码,变量a的值被改变成200。

对于非指针的简单变量,能被程序改变的,只有这一种。而指针变量,似乎有两种改变。

20.1.1 改变指针的值

这一点和普通变量一致。但要特别注意,“改变指针的值”引起的结果是什么?其实就是“改变指针的指向”。

因为,指针的值是某个变量的地址。假如指针P原来的值是A变量的地址,现在改为B变量的地址。我们称为:“P由指向A改为指向B”。这就是指针的第一种改变。

以下是示例代码:

int* P;

int A,B;

1) P = &A;

2) ...

3) P = &B;

1) 行代码中,P 的值为 &A,即P指向变量A。

到3)行代码中,P的值变为&B,即改为指向变量B。

下面讲:指针的第二种改变。通过指针,改变指针所指的变量的值。

20.1.2 改变指针所指的变量的值

复习前一章,我们知道通过 * (地址解析符),可以得到、或改变指针所指的变量的值。

白话C++

int* P;

int A = 100;

P = &A;

*P = 200;

cout << A << endl;

代码中加粗的那一行:*P = 200; ,其作用完全等同于:A = 200;

所以,最后一行输出的结果是 200。

这就是指针的第二种改变:所指变量的值,被改变了。

20.1.3 两种改变?一种改变?

两种改变的意义不同:

改变一:改变指针本身的值(改变指向)。

改变二:改变指针指向的变量的值。

从代码上看:

第一种改变,P = &A; 左值(等号左边的值)是变量本身,右值

则是一个地址。

而第二种改变,*P = 200; 左值通过星号对P操作,来取得P指

向的变量;右值是普通的值。

理解,区分对指针的两种改变,才能学会如何使用指针。

请思考:上一章讲的“指针的加减操作”,是对指针的哪一种改变?

白话C++

最后需要说明,严格意义上,指针仍然只有一种改变,即改变指针本身的值。改变指针指向的变量,应视为对另一变量的改变,只不过在代码上,它通过指针来进行,而不是直接对另一变量进行操作。

为指针分配、释放内存空间

之前,我们给指针下的定义是“指针是一个变量,它存放的值是另一个变量的地址”。

比如:

int a;

int* p = &a;

看,a 就是“另一个变量”,p指向了a。

我们知道,变量总是要占用一定的内存空间,比如上面的a,就占用了4个字节(sizeof(int))。这四个字节属于谁?当然属于变量a,而不是p。

现在要讲的是:也可以单独为指针分配一段新的内存空间。这一段内容不属于某个变量。

20.2 C++ 方式的内存分配与释放 new 和 delete

在内存管理上,C++ 和 C 有着完全不同的两套方案。当然,C++的总是同时兼容C。C的那一套方案在C++里同样可行。

我们首先看看纯C++的那一套: new 和 delete。

new ,从字面上看意思为“新”;而delete 字面意思为“删除”。二者在C++中内存管理中大致的功能,应是一个为“新建”,一个为“删除”。

20.2.1 new

白话C++

new 是 c++ 的一个关键字。被当作像 +、-、* 、/ 一样的操作符。它的操作结果是在申请到一段指定数据类型大小的内存。

语法:

指针变量 = new 数据类型;

new 将做三件事:

1、主动计算指定数据类型需要的内存空间大小;

2、返回正确的指针类型;

3、在分配内存的一,将按照语法规则,初始化所分配的内存。

这是什么意思呢?看看例子吧:

int* p;

p = new int;

和以往不一样,p 这回不再“寄人篱下”,并不是指向某个已存在的变量,而是直接指向一段由new 分配而来的新内存空间。

“p 指向一段由new 分配而来的新内存空间”这句话等同于:“new 分配一段新的内存空间,然后将该内存空间的地址存入到变量p中。”

所以,最终p中仍然是存储了一个变量的地址,只是,这是一个“无名”变量。

指向原有的某个变量,和指向一段新分配的内存空间,有什么区别呢?

“原有的变量”,可以比喻成指向一间原有的,并且有主的房间。而“新分配的内存空间”,则像是一个“临时建筑物”。我们必须在不用它的时候,主动将它拆迁。拆迁的工作由delete来完成。

白话C++

当指针变量通过 new ,而得到一个内存地址后,我们就可以像以前的所说的,通过该指针,通过*号,而对该内存地址(一个无名的变量),进行操作。

如:

int* p = new int;

*p = 100;

cout << *p << endl;

屏幕将输出100。

20.2.2 在new 时初始化内存的值

new 也可以在申请内存空间时,直接设置该段内存里要放点什么.

语法:

指针变量 = new 数据类型(初值);

这样,上例可以改为:

int* p = new int(100);

cout << *p << endl;

如果你申请的是字符类型的空间,并且想初始化为‘A':

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说医药卫生第20章 指针 二 为指针分配和释放空间在线全文阅读。

第20章 指针 二 为指针分配和释放空间.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/yiyao/1252246.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: