指针数组、数组指针、指针函数、函数指针、函数指针数组、对象指针解析
2015-10-23 20:20
375 查看
指针是一个存储计算机内存地址的变量。在这份教程里“引用”表示计算机内存地址。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如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的函数。
指向对象的指针
在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。对象空间的起始地址就是对象的指针。可以定义一个指针变量,用来存放对象的指针。例如定义一个类:
在此基础上有以下语句:
可以通过对象指针访问对象和对象的成员,如:
注:上面的第2,3行的作用是等价的,第4,5也是等价的
指向对象成员的指针
对象有地址,存放对象初始地址的指针变量就是指向对象的指针变量。对象中的成员也有地址,存放对象成员地址的指针变量就是指向成员的指针变量。
指向对象数据成员的指针:数据类型 *指针变量名
指向对象成员函数的指针:数据类型名(*指针变量名)(参数表列)
注意:(Time::*p2)的括号不能省略,因为括号的优先级高于*。如果没有括号就相当于
定义指向公用成员函数的指针变量一般为:
数据类型名 (类名:: *指针变量名) (参数表列)
可以让它指向一个公用成员函数,只需要把公用成员函数的入口地址赋给一个指向公用成员函数的指针变量即可。例如:
使指针变量指向一个公用成员函数的一般形式为
指针变量名= &类名::成员函数;
在VC++系统中,也可以不写&,以和C语言的用法一致,但建议在写C++程序时不要省略&。
指针数组:存放指针的数组,它就是一个数组,数组里面存放的元素都是指针(也就是数组里面存放了一些地址)
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->hour | pt所指向的对象中的hour成员,即t1.hour |
(*pt).get_time() | 调用pt所指向的对象中的get_time函数,即t1.get_time |
pt->get_time() | 调用pt所指向的对象中的get_time函数,即t1.get_time |
指向对象成员的指针
对象有地址,存放对象初始地址的指针变量就是指向对象的指针变量。对象中的成员也有地址,存放对象成员地址的指针变量就是指向成员的指针变量。
指向对象数据成员的指针:数据类型 *指针变量名
指向对象成员函数的指针:数据类型名(*指针变量名)(参数表列)
void (Time::*p2)(); 定义p2为指向Time类中公共成员函数的指针变量
注意:(Time::*p2)的括号不能省略,因为括号的优先级高于*。如果没有括号就相当于
void Time:: *p2(); //返回值为void型指针的函数
定义指向公用成员函数的指针变量一般为:
数据类型名 (类名:: *指针变量名) (参数表列)
可以让它指向一个公用成员函数,只需要把公用成员函数的入口地址赋给一个指向公用成员函数的指针变量即可。例如:
p2 = &Time::get_time;
使指针变量指向一个公用成员函数的一般形式为
指针变量名= &类名::成员函数;
在VC++系统中,也可以不写&,以和C语言的用法一致,但建议在写C++程序时不要省略&。
相关文章推荐
- 代码能不能不要写得这么烂?!
- HiveServer2 的jdbc方式创建udf的修改(add jar 最好不要使用),否则会造成异常: java.sql.SQLException: Error while processing statement: null
- 图像处理中的数学原理详解(Part5) ——傅立叶级数的概念2
- 冲击GCT——考试法宝
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
- 算法计划
- 熟练使用map div2 B. Misha and Changing Handles
- HDU 1241油田问题(广搜)
- javascript基础之三(对象详解)
- WCF 服务应用程序与 服务库之间的区别
- WCF 服务应用程序与 服务库之间的区别
- 加密解密
- 【UVA1331】关于最优三角剖分
- 你得首先理解领域需求
- 概念完整性
- jsp文件开头<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 > 有什么用
- 图像处理中的数学原理详解(Part4) ——傅立叶级数的概念1
- ws2_32.lib 网络编程
- Linux下Firefox打开文件jnlp文件
- PCA主成分分析的原理解析