指针数组、数组指针、指针函数、函数指针、函数指针数组、对象指针解析

      指针是一个存储计算机内存地址的变量。在这份教程里“引用”表示计算机内存地址。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。


指针数组存放指针的数组,它就是一个数组,数组里面存放的元素都是指针(也就是数组里面存放了一些地址)

Example: uint16     *mbxlength[1024];就是一个指针数组。数组mbxlength[1024]里面存放了1024个uint16类型的指针变量(uint16类型的指针变量的意思就是这个每个指针变量所指向的元素是uint16类型的)。

数组指针指向数组的指针,它就是一个指针,这个指针指向一个数组。

Example: uint16  (*mbxlength)[1024];就是一个数组指针。这个指针指向一个存放了1024个uint16类型数据。

指针函数返回值类型为指针变量的函数,就是一个函数。

Example: uint16      *mbxlength(int 16, int 32);就是一个指针函数。它是一个函数,函数的返回值类型为一个指向uint16类型数据的指针变量。

函数指针指向函数的指针,它就是一个指针,这个指针指向一个函数。

Example: uint16  (*mbxlength)(int16, int32 );就是一个函数指针。它是一个指针,这个指针指向一个返回值类型为uint16类型的数据,参数列表为int16类型和int32类型的函数。

函数指针数组存放函数指针的数组,它就是一个数组。也即是数组的每一个元素都是一个函数指针。(说白了,就是一个指针数组,只不过这个指针数组里面存放的指针是特殊的指针,都是指向某种类型函数的指针)

Example: uint16  (*mbxlength[1024])(int16, int32);就是一个函数指针数组。这个数组有mbxlength[1024]存放了1024个函数指针,每个函数指针都指向一个返回值类型为uint16类型的数据并且参数类型为int16和int32的函数。

指向对象的指针

在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。对象空间的起始地址就是对象的指针。可以定义一个指针变量,用来存放对象的指针。例如定义一个类:

class Time
{public:
  int hour;
  int minute;
  int sec;
  void get_time();

};
void Time::get_time()
{ cout<<hour<<":"minute<<":"<<sec<<endl;}

在此基础上有以下语句:

Time *pt;   //定义pt为指向Time类对象的指针变量
Time t1;     //定义t1为Time类对象
pt=&t1;     //将t1的起始地址赋给pt


可以通过对象指针访问对象和对象的成员,如:

*pt pt所指向的对象,即t1  
(*pt).hour  pt所指向的对象中的hour成员,即t1.hour
pt->hourpt所指向的对象中的hour成员,即t1.hour
(*pt).get_time()调用pt所指向的对象中的get_time函数,即t1.get_time
pt->get_time()调用pt所指向的对象中的get_time函数,即t1.get_time
注:上面的第2,3行的作用是等价的,第4,5也是等价的

指向对象成员的指针

对象有地址,存放对象初始地址的指针变量就是指向对象的指针变量。对象中的成员也有地址,存放对象成员地址的指针变量就是指向成员的指针变量

  1. 指向对象数据成员的指针:数据类型 *指针变量名     
  2. 指向对象成员函数的指针:数据类型名(*指针变量名)(参数表列)
void (Time::*p2)();        定义p2为指向Time类中公共成员函数的指针变量

注意:(Time::*p2)的括号不能省略,因为括号的优先级高于*。如果没有括号就相当于

void Time::  *p2();            //返回值为void型指针的函数

定义指向公用成员函数的指针变量一般为:

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

可以让它指向一个公用成员函数,只需要把公用成员函数的入口地址赋给一个指向公用成员函数的指针变量即可。例如:

p2 = &Time::get_time;


使指针变量指向一个公用成员函数的一般形式为

指针变量名= &类名::成员函数;

在VC++系统中,也可以不写&,以和C语言的用法一致,但建议在写C++程序时不要省略&。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值