7.3 指针的种类
指针本身是一个无符号型整数,但是根据指针指向对象不同和用法的不同可以分成许 多种。
1.按指向对象的不同划分
如果指针指向的对象是整型数据,就称为整型指针。如果指针指向的对象是结构体就叫结构体指针。如果指针指向的是函数就叫函数指针。
【示例7-4】 定义6种指向不同对象的指针。
- int *pInt;
- float *pFloat;
- char *pChar;
- char (*pCharArray1)[2];
- char *pCharArray2[2];
- char (*pFun)(int num);
分析:该示例定义了6类指针,第1个指针指向整型数,叫整型指针。第2个指向浮点型,叫浮点指针。第3个指向字符型,叫字符指针。第4个指向数组,叫数组指针。第5个指针本身是数组,叫指针数组。最后一个指向的是返回类型为char型,形参为整型的函数指针。数组指针和函数指针的理解比较复杂,在本书后续章节讲解数组和函数时将详细讲解。
2.按指针的多级性划分
指针的多级性是按指针所指数据是否仍然为指针来划分的。按这个划分方法可以将指针分为单级间指和多级间指。单级间指直接指向对象。多级间指指向的仍然是指针,也叫指针的指针。指针的级数由指针定义时的指针标识符表示,每出现一个*就增加一级。
1个*表示变量的内容是地址,该地址指向的内存单元是数据。2个*时,第1个*表示变量的内容是地址,第2个*表示该地址指向的内容仍是地址,这个地址指向的才是数据。有几个*就可以解释成有几个地址变换。例如3个表示经过3次地址变换才能定位到真正的存储数据的单元。
【示例7-5】 指针的多重性举例。
- int *pInt1;
- int **pInt2;
- int ***pInt3;
分析:该示例声明了3个指针,其中第1个指针直接指向一个保存整型数据的内存单元,叫做单级间指。第2个指针指向的内容仍然是指针,该指针才指向真正的整型数据,所以叫指针的指针。第3个指针指向的内容是指针的指针,也是多级间指。
多级间指能延伸到所需要的任何一级,但跟踪困难,一般二级间指就已足够。如图7-3为三个指针的指向图示。
|
| (点击查看大图)图7-3 示例7-4的指针指向 |
3.按照指针定义后可否改变划分
按照指针定义后可否改变,可将指针分为指针常量和可变指针。
【示例7-6】 指针的可变性举例。
- int iVal;
- int *pInt1;
- const int * pInt2=&iVal;
- int const * pInt3=&iVal;
- int *const pInt3=& iVal;
- const int *const pInt4=& iVal;
分析:该示例定义了5个指针。其中,第1个指针是可变指针,指针指向的内容可变,指针的指向也是可变的。第2和第3个指针都修饰指向的对象,指针指向的对象可变,但所指向的数据的值不能变。即,指针可以指向不同的对象,但不能通过指针来修改被指向的值。这种指针也被称为可变指针。第4个指针,指针本身不能变,但指向对象的值可变。这种指针被称为指针常量。第5种指针的指向不可变,指针的内容也不可变。
【责任编辑:
云霞 TEL:(010)68476606】