- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 指针-yap
C++面向对象程序设计 第六章 指针 6.1指针的概念 6.2指针变量 6.3指针运算 6.4 指针与数组 6.5引用变量 6.6动态存储分配 6.1 指针的概念 指针既是C++语言学习中的难点又是重点,要掌握C++语言的精髓,必须学会熟练使用指针。本节先引入指针的概念。 为了说明什么是指针,必须弄清楚数据在内存中是如何存储的,又是如何读取的。如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元。 系统根据程序中定义的变量类型,分配一定长度的空间。例如,许多计算机系统对整型变量分配两个字节,对实型变量分配四个字节,对字符型变量分配一个字节,……。内存区的每一个字节(即单元)有一个编号,这就是“地址”,它相当于旅馆中的房间号。在地址所标识的单元中存放数据,这相当于旅馆中各个房间中住旅客一样。 在此,务必弄清楚一个内存单元的地址与内存单元的内容这两个概念的区别。如图1所示,假设程序已定义了三个整型变量short int i、j、k,编译时系统分配2000和2001两个字节给变量i,2002、2003字节给j,2004、2005给k。在内存中已没有i、j、k这些变量名了,对变量值的存取都是通过地址进行的。 还可以采用另一种称之为“间接访问”的方式。这类似于在程序中定义整型、实型、字符等变量,也可以定义这样一种特殊的变量,它是用来存放地址的,即可以将变量i的地址存放在另一个内存单元中。假设我们定义了变量i_pointer是存放整型变量的地址的,它被分配为3030、3031字节单元。可以通过下面的语句将i的地址存放到i_pointer中: i_pointer=i; 这时,i_pointer的值就是2000,即变量i所占用单元的起始地址。 要存取变量i的值,也可以采用间接方式:先找到存放“i的地址”的单元地址(3030、3031),从中获得i的起始地址(2000),然后从2000、2001字节中取出i的值(3)。 简而言之,指针就是指向内存中某个单元的地址值。所有的变量、数组、对象都是保存在内存中的。凡是保存在内存中的信息,必须知道它在内存中的位置。在计算机中,引用了“地址”这个词来代表内存的某个位置。内存以字节为单位编址,称为内存地址。 6.2 指针型变量 6.2.1指针型变量的声明 在C++语言中,任何一种数据类型都有对应的指针类型,甚至指针类型本身也有指针类型。要声明一种数据类型的指针型变量,必须在声明变量时将“*”号加在数据类型的后面。定义指针变量的一般形式如下: 类型标识符*指针变量名 定义中的“*”表示所定义的变量是一个指针变量,以示与其它变量的区别。指针变量名的命名应符合标识符的命名规则。指针变量的值是另一变量的指针(即首地址)。定义中的数据类型是指针变量所指变量的数据类型。 注意,一个指针变量只能指向定义所指定数据类型的变量,即存放定义所指定数据类型的变量的地址,因此,指针变量所存放的地址是一个具有指定数据类型的地址。例如: int*pnNumber; //pnNumber是用来保存一个指向int型变量的指针的指针型变量 f1oad*pfRealNumber; //pfRealNumber是用来保存一个指向float型变量的指针的指针型变量 BOOL*pbResult; //pbResult是保存一个指向int型变量的指针的指针型变量,注意BOOL型与int型的共用特性 char*ppBuffer[5]; //数组ppBuffer是用来保存5个指向char型变量的指针的指针型变量数组 void*pAddress; //pAddress是一个保存内存地址的指针型变量,该内存地址中保存的数据类型无须知道 void*型指针是很特殊的一种指针,它不像int*、float*等指针那样,指向的内存单元中保存的是具体的一种数据类型的变量,void*只是一个地址,这个地址中保存的可能是int型变量的起始地址,也可能是f1oat型变量的起始地址,也可能什么都不是。 声明指针型变量时,“*”前后可以加空格,也可以不加,这完全取决于程序员的习惯。 尽管大多数指针变量类型同其对应的普通数据类型之间表面上只差一个“*”号,但它们之间的关系相当特殊。必须牢记这样的
文档评论(0)