设为首页 加入收藏

TOP

7.6 指针的指针
2013-10-07 01:12:32 来源: 作者: 【 】 浏览:73
Tags:7.6 指针

7.6  指针的指针

指针的指针意味着指针所指向的内容仍然是另一个指针变量的地址,这在7.2节提到过。指针的指针是指针中的难点,不易理解。本节将向读者详细讲解它的内涵和用途。指针的指针声明方式如下:

  1. type **ptr; 

变量访问内存单元是直接访问,用指针访问内存单元则属于间接访问。如果指针直接指向数据单元,则称为单级间址。单级间址定义时使用一个*号。如果指针指向的内容依然是地址,该地址才指向真正的数据单元,那么这种指针就叫二级间指。二级间指定义时使用两个    *号。

【示例7-15】 假设有字符变量ch='a',则让指针ptr1指向ch,指针ptr2指向ptr1的代码如下所示。

  1. char ch='a';  
  2. char ptr1=&ch;  
  3. char **ptr2;  
  4. *ptr2=&ptr1; 

分析:指针的指向关系如图7-4所示。

在该图中,ch存放在1004单元中,字符变量占一个字节。ptr1存放在1000开始的4字节内存单元中(指针是无符号整型数,占4字节),它的内容是ch所在单元地址1004。ptr2放在1006开始的4字节中,其内容是ptr1所在的内存块的首地址。它们之间的指向关系如图中的箭头所示。

 
(点击查看大图)图7-4  单级间指与二级间指

从图7-4可见,如果用ptr1去访问能ch,则只需要一次跳转就可寻径到ch。而如果通过ptr2来访问ch,则需要先跳转到ptr1,再跳转到ch。

定义中有几个*号就是几级间指,访问到最终数据单元时就需要几级跳转。

【示例7-16】 多级间指举例。

  1. int ***p;       //三级间指  
  2. int ****p;      //四级间指 

分析:理解间指时要从右向左。对于"int ***p;"可按如下过程理解。从右向左,先看到p,表明变量名为p。再向左,遇到*,表明p的内容是地址,*p是指针。继续向左,又是*,表明*p的内容是地址,**p是指针。再向左,还是*,表明**p内容依然是地址,***p是指针。最后再向左是int,没有了*,表明***p的内容是整型数据。

技巧:将指针的指针用于数组和函数传值中。指针的指针常常作为函数的参数,使函数能够修改局部指针变量,即在函数内修改局部指针的指向。在数组处理中,可以用指针的指针来代替多维数组。

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

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇7.1 地址是什么 下一篇7.5.2 关系运算

评论

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