对C++中指针的深入研究_第1页
对C++中指针的深入研究_第2页
对C++中指针的深入研究_第3页
对C++中指针的深入研究_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、对C+中指针的深入研究    2010-12-19 2:33:57      作者:王根义   代写论文    摘  要:本文对C+各种类型的指针进行了深刻全面地讨论,把各种指针的常量,变量的声明、赋值和访问都一一列出,这对利用指针开发大型软件的程序员来说无疑是一个非常有力的工具。本文还揭示了指针变量与数组名的内在关系,以及类的静态数据指针与非静态数据指针的根本区别。关键词:指针类型、指针常量、指针变量、数组名Abs

2、tract:All kinds of pointers in C+ are thoroughly and deeply discussed.The constant quantity,variables,the form of endowing with value and access to data are listed like a table.This is undoubtedly a useful tool to a programmer who develops big softwares.The author bring to light the relationship bet

3、ween the pointer variables and the name of number groups.He also reveals the essential distinction between a static pointer and non-static pointer. Keywords:pointer type data,pointer constant quantity,pointer variable,a number groups nameC+中的“指针”实质上是指针类型的数据,所以指针既有常量,也有变量。但是人们往往只是简单的说“指针”,没有带“常量”或“变量

4、”二字。那么,该“指针”到底是指常量呢还是指变量呢?这个问题要根据它所属的那个整句才能回答。C+中的指针按照它所指向的对象可以划分为变量指针、数组指针、函数指针、对象指针、类的成员数据指针和类的成员函数指针。一、变量指针设type代表任意一种基本类型说明符,X是该类型的变量,则:1、X的指针常量为&X。2、一个type型指针变量P的声明格式为:type *P;3、使P指向X,也就是说用&X向P赋值的格式为:用&X初始化;在声明了P后向P赋值。二、数组指针设A是一个有3行4列个type型变量元素的一个二维数组,则:1、A有两个意义:表示这12个type型变量构成的整体。表

5、示A<0>的地址,即A=&A<0>。A<0>也有两个意义:表示A的第一行的4个type型变量构成的整体(A中左下标为0的一行元素);表示A<0><0>的地址。2、声明一个指向type型的有3行4列个元素的二维数组的指针P的格式为:type(*P)<3><4>;声明一个指向type型的有4个元素的一维数组指针P1的格式为: type(*P1)<4>;声明一个指向type型变量的指针P2的格式为:type  *P2。3、使P指向A的方式为:用&A初始化P或在声明了P后向 P赋值

6、;使P1指向A<1>的方式为:用“A+1”初始化P1或在声明了P1后向P1赋值;使P2指向A<2><1>的方式为:用&A<2><1>初始化P2或在声明了P2后向P2赋值。4、用 A和*来表示A<2><1>的表达式为*(*(A+2)+1),表示A<0><0>的表达式为*A。5、按3,用P和*来表示A<2><1>的表达式为*(*(*P+2)+1);用P1和*来表示A<2><1> 的表达式为*(*(P1+1)+1);用P2和*来表示A&l

7、t;0><0>的表达式为:*(P-6);用P、P1和P2来访问A的元素有很多优越性,如它们及其表达式可以进行+运算和- -运算而指针常量却办不到。三、函数指针设一个函数的原型为:type fun (),则:1、 fun()的指针常量为fun2、声明一个数据类型为type,形参表为FL的函数指针P的格式为:type (P)(FL);3、用一个数据类型为type形参表为FL的函数指针只能指向数据类型为type形参表为FL的函数。按(1)和(2),用P指向fun()的方式为:用fun初始化P或在声明P后向P赋值。4、用P而不用fun来调用fun()的格式为:P(和FL对应的实参表)

8、;四、对象指针设t是A类的一个对象,a和f( )分别是A的一个公有变量成员和公有函数成员,则:1、t的指针常量为&t;2、声明一个指向A类的对象的指针P的格式为:A*P;3、使P指向t的方式为:用&t初始化P或者在声明了P后再向P赋值。4、用P而不用t来表示t. a的格式为:P->a;用P而不用t来访问f( )的格式为:P-> f( );五、类的数据成员指针设t是A类的一个对象,a是A的一个非静态type型成员数据,s是A的一个静态type1型成员数据,则:1、A:a的相对指针常量为&A: a;A:s的物理指针常量为&A: s2、可以指向A类的typ

9、e型非静态成员的指针P1的声明格式为:type  A:*P1; 可以指向A类type型静态成员的指针P2的声明格式为:type 1*p2;3、使P1指向A:a的方式为:用& A: a初始化P1或在声明了P1后向P1赋值;使P2指向A:s的方式为:用& A: s初始化P2或在声明了P2后向P2赋值。4、用P1而不用a来访问t.a的格式为:t .* p1;用P2而不用s来访问t.s的表达式为*P2六、类的函数成员指针设t是A类的一个对象,f(FL1)是A类的一个type型非静态的函数成员,g(FL2)是A类的一个type1型静态函数成员,则:1、A:f( )的相对指针常量

10、为A:f;A:g( )的物理指针常量为A:g2、可以指向A的非静态type型形参表为FL1的函数成员的指针P1的声明格式为type( A:*P1)(FL1);可以指向A的静态type1型形参表为FL2的函数成员的指针P2的声明格式为:type1(*P2)(FL2)3、使P1指向A:f( )的方式是:用A:f初始化P1或在声明了P1后向P1赋值;使P2指向A:g( )的方式是:用A:g初始化P2或者在声明了P2之后向P2赋值。4、用P1而不用f来访问t.f()的格式为:(t.*p1)(实参表);这里的“*”为指针说明符而不是指针运算符;用P2而不用g()来访问t.g( )的格式为:P2(实参表)

11、;七、指针的特点1、数据指针+n=数据指针+(n×这个数据的字节数)(n=整数,n为小数不合法)。如:设P为一个int型指针,则P+2=P的值+8(2×4);设P1为一个有3行2列个int型变量元素的数组的指针,则P1+2=P1的值+2×24;设A类有16个字节,P2是一个A类的指针,则P2+2=P2的值+2×16。2、下面的表达式不合法:函数指针+n。 参考文献<1> 谭浩强,C+程序设计教程,中国科学技术出版社,1995<2> Microsoft、何晓刚译,Visual C+4.0教程,科学出版社,1997。<3> 刘卫东、沈官林译,数据结构C+语言描述,北京,清华大学出版社,2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论