设为首页 加入收藏

TOP

7.3 指针的种类
2013-10-07 01:12:40 来源: 作者: 【 】 浏览:76
Tags:7.3 指针 种类

7.3  指针的种类

指针本身是一个无符号型整数,但是根据指针指向对象不同和用法的不同可以分成许       多种。

1.按指向对象的不同划分

如果指针指向的对象是整型数据,就称为整型指针。如果指针指向的对象是结构体就叫结构体指针。如果指针指向的是函数就叫函数指针。

【示例7-4】 定义6种指向不同对象的指针。

  1. int *pInt;              //整型指针  
  2. float *pFloat;          //浮点型指针  
  3. char *pChar;            //字符型指针  
  4. char (*pCharArray1)[2]; //数组指针  
  5. char *pCharArray2[2];   //指针数组  
  6. char (*pFun)(int num);  //函数指针 

分析:该示例定义了6类指针,第1个指针指向整型数,叫整型指针。第2个指向浮点型,叫浮点指针。第3个指向字符型,叫字符指针。第4个指向数组,叫数组指针。第5个指针本身是数组,叫指针数组。最后一个指向的是返回类型为char型,形参为整型的函数指针。数组指针和函数指针的理解比较复杂,在本书后续章节讲解数组和函数时将详细讲解。

2.按指针的多级性划分

指针的多级性是按指针所指数据是否仍然为指针来划分的。按这个划分方法可以将指针分为单级间指和多级间指。单级间指直接指向对象。多级间指指向的仍然是指针,也叫指针的指针。指针的级数由指针定义时的指针标识符表示,每出现一个*就增加一级。

1个*表示变量的内容是地址,该地址指向的内存单元是数据。2个*时,第1个*表示变量的内容是地址,第2个*表示该地址指向的内容仍是地址,这个地址指向的才是数据。有几个*就可以解释成有几个地址变换。例如3个表示经过3次地址变换才能定位到真正的存储数据的单元。

【示例7-5】 指针的多重性举例。

  1. int *pInt1;     //单级间指  
  2. int **pInt2;    //两级间指  
  3. int ***pInt3;   //三级间指 

分析:该示例声明了3个指针,其中第1个指针直接指向一个保存整型数据的内存单元,叫做单级间指。第2个指针指向的内容仍然是指针,该指针才指向真正的整型数据,所以叫指针的指针。第3个指针指向的内容是指针的指针,也是多级间指。

多级间指能延伸到所需要的任何一级,但跟踪困难,一般二级间指就已足够。如图7-3为三个指针的指向图示。

 
(点击查看大图)图7-3  示例7-4的指针指向

3.按照指针定义后可否改变划分

按照指针定义后可否改变,可将指针分为指针常量和可变指针。

【示例7-6】 指针的可变性举例。

  1. int iVal;                       //定义整型变量  
  2. int *pInt1;                     //指针变量  
  3. const int * pInt2=&iVal;        //指针常量,指向可变,所指内容不可变  
  4. int const * pInt3=&iVal;        //指针常量,指向可变,所指内容不可变  
  5. int *const pInt3=& iVal;        //指针常量,指向不可变,所指内容可变  
  6. const int *const pInt4=& iVal;  //指针常量,指向不可变,所指内容不可变 

分析:该示例定义了5个指针。其中,第1个指针是可变指针,指针指向的内容可变,指针的指向也是可变的。第2和第3个指针都修饰指向的对象,指针指向的对象可变,但所指向的数据的值不能变。即,指针可以指向不同的对象,但不能通过指针来修改被指向的值。这种指针也被称为可变指针。第4个指针,指针本身不能变,但指向对象的值可变。这种指针被称为指针常量。第5种指针的指向不可变,指针的内容也不可变。


【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇7.7.1 指针的赋值 下一篇7.1 地址是什么

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: