1 / 32
文档名称:

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

格式:doc   页数:32页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

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

上传人:中国课件站 2011/9/6 文件大小:0 KB

下载得到文件列表

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

文档介绍

文档介绍:第二十章指针二为指针分配和释放空间

理解指针的两种“改变”
  改变指针的值
  改变指针所指的变量的值
  两种改变?一种改变?
C++ 方式的内存分配与释放 new 和 delete
  new
  在new 时初始化内存的值
  delete
  实验: new 和 delete
  new 和 delete 的关系
new [] 和 delete []
  new[] / delete[] 基本用法
  new []/ delete[] 示例
  详解指向连续空间的指针
delete/delete[] 的两个注意点
  一个指针被删除时,应指向最初的地址
  已释放的空间,不可重复释放
C 方式的内存管理
  分配内存 malloc 函数
  释放内存 free 函数
  重调空间的大小: realloc 函数
  malloc、realloc、free的例子

理解指针的两种“改变”
普通变量(非指针,简单类型变量)只能改变值:

1) int a = 100;
2) ...
3) a = 200;

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

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

改变指针的值
这一点和普通变量一致。但要特别注意,“改变指针的值”引起的结果是什么?其实就是“改变指针的指向”。
因为,指针的值是某个变量的地址。假如指针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。

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

改变指针所指的变量的值

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

int* P;
int A = 100;

P = &A;
*P = 200;

cout << A << endl;

代码中加粗的那一行:*P = 200; ,其作用完全等同于:A = 200;
所以,最后一行输出的结果是 200。

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

两种改变?一种改变?

两种改变的意义不同:
改变一:改变指针本身的值(改变指向)。
改变二:改变指针指向的变量的值。

从代码上看:
第一种改变,P = &A; 左值(等号左边的值)是变量本身,右值则是一个地址。
而第二种改变,*P = 200; 左值通过星号对P操作,来取得P指向的变量;右值是普通的值。

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

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

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

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

之前,我们给指针下的定义是“指针是一个变量,它存放的值是另一个变量的地址”。
比如:
int a;
int* p = &a;

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

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

C++ 方式的内存分配与释放 new 和 delete
在内存管理上,C++ 和 C 有着完全不同的两套方案。当然,C++的总是同时兼容C。C的那一套方案在C++里同样可行。
我们首先看看纯C++的那一套: new 和 delete

最近更新