四、对象指针
设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:: s
2、①可以指向A类的type型非静态成员的指针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( )的相对指针常量为A::f;②A::g( )的物理指针常量为A::g
2、①可以指向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(实参表);
七、指针的特点
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++语言描述》,北京,清华大学出版社,2000
<4>邱龙、张巍,《C++语言入门》,北京,清华大学出版社,1999