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!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

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

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...