下载此文档

指针、引用、字符串.pdf


文档分类:IT计算机 | 页数:约17页 举报非法文档有奖
1/17
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/17 下载此文档
文档列表 文档介绍
一、指针(pointer):
(一)描述:
指针被存放在内存中,它的值是它指向的内存单元的地址。要足够保存这个地址,
它的大小自然不会小于该机器的字长(准确来说,这也和编译器的实现有关:若在 32
位平台上使用 16 位的 TC,则地址和指针仍是 16 位的)。
它提供了一种通过*运算符(dereference,解引用)来访问内存单元的方式。
(二)定义和声明:
一般来说,指针的声明就是它的定义(对于变量和常量来说,声明一般都是它的定
义。据我所知,只有在声明时使用 extern 且未在该处初始化,或在类类型的定义中声
明类静态数据成员时例外。本文将要描述的其他 3 者也相同,下文就不再重复这句了)。
作为一个良好的编程风格,指针应被初始化为一个实体的地址或 NULL,使用如下
格式定义(关于&和*运算符的描述可以见下文):

关于 NULL,VC++ 中的某些 C 标准头文件有如下定义(如<>和
<>。再次注意:未特别指明时,下文的实现均指在 VC++ 中):
而 C++标准头<cstdlib>和<cstdio>只是简单地分别#include 了<>和
<>,并包含在 namespace std 中。
其他的 C++标准头(至少所有和输入输出相关的都是如此)通过几层 include,
最终也包含了<>或<>。
另外,指针还可以指向一个函数,这被称为函数指针。使用如下方式声明一个函数
指针:
顺便提一下,使用如下方式定义一个指针常量(即该指针的内容为常量,也即该
指针一般不能再指向其他的地址):
将定义的左边改为 type* const pointer 即可。
注意 const 修饰的是它左边的类型(这里我将指针也当成类型),当它左边没有
类型时,才会修饰右边的类型。关于这点,volatile 和 const 是一致的。
下面做个简单的测试,看看指针究竟是什么:

输出:(这是在我同学的电脑上得到的结果,也许和你的不同。下面不再注明)
&b = 0012FF7C
p1 = 0012FF7C &p1 = 0012FF78
p2 = 0012FF7C &p2 = 0012FF74
pn = 00000000 &pn = 0012FF70
反汇编可得到如下代码(只提供关键部分,下同):
由上述测试得知,指针的内容就是地址。
注:
,也应该可以从测试的输出得出上述结论。反汇编只是为了解
释指针的存储原理。
new 返回的是一个指针,所以实际和第 9 句是类似的,就不再做重复的实
验了。
(三)运算:
对一个实体的地址使用*运算符,可以得到该实体的地址对应的内存单元的值(概
念上来说可被视为一个引用,一般为该实体本身,可以作为左值(即可以通过名称或地
址(而非靠纯粹的计算)来访问的表达式))。这个值的类型与*的操作数类型相同。
对一个非 void 类型的指针使用*运算符,可以得到该指针指向的内存单元的值(引
用)。这个值的类型与该指针的类型相同。注意,若该内存单元是不可读的,则程序会
崩溃;若该内存单元是不可写的,却对其赋值,则程序也会崩溃。
对一个实体使用&运算符,可以得到它的地址。这个实体是一个左值,且不能为位
域成员。这个地址是一个右值,它不能被赋值或再次使用&运算符。
对一个非 const 类型指针使用=运算符,并提供一个地址或指针作为右操作数,可
以使该指针的值更改为这个地址或指针的值。这里的注意事项同指针的定义和声明。
对一个非 const 或 void 类型指针使用++或--运算符,可以让该指针的值增加或减少
(sizeof(指针的类型))(我用西文字符的括号表示一个表达式,下同),一般来说会指
向下一个或上一个实体(如果指针未越界的话,下同)。
对一个非 const 或 void 类型指针使用+或-运算符,并提供一个 ptrdiff_t 类型的参数
(ptrdiff)(可以为负数)作为操作数,可以得到一个该类型的指针。这个指针是一个右
值,它的值为((指针的内容) op ((ptrdiff) * sizeof(指针的类型))),op 为使用的运算
符。一般来说会指向与原实体相距 ptrdiff 个实体。
对一个非 const 或 void 类型指针使用+=或-=运算符,并提供一个 ptrdiff_t 类型的
参数(ptrdiff)作为右操作数,可以让该指针的值增加或减少((ptrdiff) * sizeof(指针的

指针、引用、字符串 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数17
  • 收藏数0 收藏
  • 顶次数0
  • 上传人cjrl214
  • 文件大小0 KB
  • 时间2015-09-08
最近更新