C++编程中的指针用法大全

  次阅读 来源:互联网(转载协议) 2016-01-19 12:56 我要评论(0)

在 C++中,指针用得比较多,对于里面众多的指针用法,不免弄得有些糊涂,自从我从图书馆里借到一本谭浩强教授主编的《C++面向对象程序设计》后,才帮我 理清了思路。现把部分内容展现给大家,希望对大家有所帮助。

C++程序设计重要基础就是类和对象,对象指针是很重要的一部分,包括指向对象的指针、指向对象成员的指针、this指针、指向对象的常指针、指向常对象 的指针等。

1、 指向对象的指针

定 义:对象空间的起始地址就是对象的指针。

说 明:在建立对象时,编译系统就为每个对象分配一定的存储空间以存放其成员,不过注意,在一般情况下不同对象的数据存储单元中存放的数据成员是不相同,而不 同对象的函数代码却是相同的,也就是说,它们的函数代码是共享的。这时我们可以定义一个指针变量用来存放对象的指针。

定 义指向类对象的指针变量的一般形式是:

类 名 *对象指针名;

如 对于与个Time类对象,我们可以有:

Time t;

Time *p;

p=&t;

我 们就可以通过对象指针访问对象和对象的成员,假如所定义的类中有数据成员hour、minute、sec,成员函数有gettime(),则

(*p).hour 即为p指向对象中的hour成员,相当于t.hour

(*p).gettime() 即为p指向对象中的成员函数gettime(),相当于t.gettime()

也 可以用如下形式:

p->hour 和 p->gettime()和上面是等价的。

2、 指向对象成员的指针

(1)指向对象数据成员的指针

在 C中我们学过指向普通变量的指针变量,在C++中定义指向对象数据成员的指针变量的方法和定义指向普通变量的指针变量方法相同,其一般形式为:

数 据类型名 *指针变量名;

如:

int *p;

p=&t.hour; //将对象t的数据成员hour的地址赋给p,p指向t.hour

(2)指向对象成员函数的指针

定 义指向对象成员函数的指针变量和定义指向普通函数的指针变量不同。

在 定义指向普通函数的指针变量时我们可以这样定义:

void (*p)();

p=fun;

(*p)(); //调用fun函数

然 而编译系统要求在将函数地址赋给指针变量时必须满足三个条件:

函 数参数类型及个数要匹配

函 数返回值的类型要匹配

所 属的类要匹配

显 然在上面的p与类是无关的。为了满足第三条,我们可以为指针指定类,故定义指向对象成员函数的指针变量一般形式为:

数 据类型(类名::*指针变量名)(参数表列);

可 以让指针指向公用的成员函数,如:

void (Time::*p)(); //定义指向Time类对象成员函数的指针变量p

p=&Time::gettime; //把Time类的公用成员函数gettime()地址赋给指针变量p

(t.*p)(); //调用Time类对象t的成员函数gettime()

注 意:因为成员函数不存放在对象空间中,多个同类对象共享此成员函数代码,所以在将成员函数的入口地址赋给指针变量是应写成:

指 向对象成员函数的指针变量=&类名::成员函数名;

在 成员函数名后面没有"()",如果写成p=&Time::gettime()是错误的。[nextp

3、 this指针

在 每个成员函数中都包含了一个特殊的指针,称为this,它是指向本类对象的指针,它的值是当前被调用成员函数所在对象的起始地址。之所以有这个指针,是因 为为了保证同类的不同对象的成员函数引用的是指定对象中的数据成员,它是系统自动实现的。

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

    品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

  • 让AI触手可及  Qualcomm携手创通联达推出全新终端侧AI开发套件

    让AI触手可及 Qualcomm携手创通联达推出全新终端侧AI开发套件

  • 第一批国家重点研发计划公布,旷视科技开启“五年行动”

    第一批国家重点研发计划公布,旷视科技开启“五年行动”

  • 长虹新款智能语音空调,告诉你空调也能玩Siri

    长虹新款智能语音空调,告诉你空调也能玩Siri

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...