本文主要包括以下简单内容
一. 指针热身
1. 与地址相关的运算 * 和 &
" * " :
声明:表示声明的是指针。int *p;
执行:表示访问指针所指对象的内容。 *p;
" & ":
声明:出现在声明变量左边,表示声明的是引用。int &r=a;
执行:出现在等号右边或作为一元运算符出现,表示取对象的地址。int *pa=&b; pa=&a;
2.对象指针
声明形式:
类名 *对象指针名
可以通过指针访问对象成员:
对象指针名->成员名
例:
Point A(3,4);
Point *ptr; //声明对象指针
ptr=&A; //将对象A的起始地址赋给对象指针ptr
(*ptr).x;
ptr->x; //访问所指对象中的x数据成员
(*ptr).getX();
ptr->getX(); //访问对象指针所指对象的函数成员
3.this指针
(1) 隐含于每一个类的成员函数中的特殊指针,指向本类对象的指针,它的值是当前被调用的成员函数所在的领域的起始地址。
(2)明确地指出了成员函数当前所操作的数据所属的对象。当通过一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对对象的数据成员进行操作时,就隐含使用了this指针。
(3)在需要时也可以显式的使用this 指针。比如当函数形参和类内已说明变量名相同时,有变量作用域问题,要显示使用this。
Point::Point(int x,int y)
{
this->x=x; //显示使用了指向当前对象的this指针
tihs->y=y;
4.指向普通函数的指针
定义方法:
数据类型(*函数指针名)(参数列表);
函数指针名=函数名;
举例:
include<iostream>
using namespace std;
void getSum(int x,int y){
cout<<x+y<<endl;}
int main(){
void (*p)(int x,int y);//p是指向void型函数的指针变量
p=getSum;//将getSum函数的入口地址赋给指针变量p, p就指向了函数
(*p)(2,3);//调用getSum函数
return 0;
}
二. 指向类成员的指针
1.指向类的非静态成员的指针
(1)通过指向成员的指针只能访问公有成员
(2)声明指向成员的指针:
包括指向公有数据成员的指针和指向公有成员函数的指针
类型说明符 类名::*指针名; //指向类的数据成员的指针
类型说明符 (类名::*指针名)(参数表); //指向类的成员函数的指针
(3)初始化:
指针名=&类名::数据成员名;
指针名=&类名::函数成员名;
(4)通过对象 / 对象指针 与 成员指针结合访问类的成员:
对象名.*类数据成员指针名;
对象指针名->*类数据成员指针名;
(对象名.*类成员函数指针名)(参数表)
(对象指针名->*类成员函数指针名)(参数表)
举例:
#include<iostream>
using namespace std;
class Point
{
public:
Point(int xx=1,int yy=2,int zz=3) {
x=xx;y=yy;z=zz; }
int z;
int GetX(){
return x;}
int GetY(){
return y;}
private:
int x,y;
};
void main()
{
Point t;
Point *ptr=&t;
cout<<"x="<<t.GetX()<<endl;
cout<<"y="<<ptr->GetY()<<endl;
i