对C++中指针的深入研究
3、①使P指向A的方式为:用&A初始化P或在声明了P后向 P赋值;②使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<0><0>的表达式为:*(P-6);
用P、P1和P2来访问A的元素有很多优越性,如它们及其表达式可以进行++运算和- -运算而指针常量却办不到。
三、函数指针
设一个函数的原型为:type fun (),则:
1、 fun()的指针常量为fun
2、声明一个数据类型为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对应的实参表);
四、对象指针
设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型静态函数成员,则