首页 理论教育 C语言程序设计-指针的指向

C语言程序设计-指针的指向

时间:2023-10-29 理论教育 版权反馈
【摘要】:而如果通过指向指针的指针变量来访问变量则构成“二级间址”,或者称为“二级指针”。如图7.33所示,实际上就是指向指针的指针。图7.33一级指针与二级指针二级指针的定义格式为:数据类型**指针变量名称其中,指针名前有两个“*”,表示是一个二级指针。因此,p1a是一级指针,p2a是二级指针。指向指针的指针通常和指针数组结合一起使用。而p是一个指向指针的指针变量。

C语言程序设计-指针的指向

如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。

前面已经介绍过,通过指针访问变量称为间接访问。由于指针变量直接指向变量,所以称为“单级间址”或“一级指针”。而如果通过指向指针的指针变量来访问变量则构成“二级间址”,或者称为“二级指针”。如图7.33所示,实际上就是指向指针的指针。

图7.33 一级指针与二级指针

二级指针的定义格式为:

数据类型**指针变量名称

其中,指针名前有两个“*”,表示是一个二级指针。

例如,有如下定义

char**p;

表示指针变量p是一个指向字符型指针的指针变量。

与定义一级指针变量相同,语句中的类型也是基本类型,即最终存放数据的普通变量的类型,因此,普通变量、一级指针变量、二级指针变量可以同时定义。

例如:

int**p1,*p2,a;

假设有如下定义:

int a,*p1a,**p2a;

p1a=&a;

p2a=&p1a;

指针p1a存放变量a的地址,即指向了变量a;指针p2a存放一级指针p1a的地址,即指向了p1a。因此,p1a是一级指针,p2a是二级指针。对于变量a的访问,既可以用一级指针p1a来访问,也可以用二级指针p2a来访问,即a、*p1a、**p2a都表示访问变量a的值,三者是等价的。

为指针变量赋地址值时级别不能弄错,即一级指针变量只能取得普通变量的地址,二级指针变量只能取得一级指针变量的地址。在二级指针变量已取得一级指针变量的地址,且一级指针变量已取得普通变量地址的前提下,就可以通过二级指针变量访问普通变量,方法是用两个连续的指向运算符“**”。

指向指针的指针通常和指针数组结合一起使用。

【例7.28】(www.xing528.com)

程序内容如下:

1 #include<stdio.h>

2 void main()

3 {

4  int i;

5  char*p Array[]={"One","Two","Three"};

6  char**p;

7  p=p Array;

8  for(i=0;i<3;i++,p++)

9   printf("%s",*p);

10  printf("\n");

11 }

程序结果如图7.34所示:

图7.34 例7.28程序结果图

【例题中关键问题说明】

p Array为指针数组,其中每一个数组元素均为指针,指向对应字符串的首地址。而p是一个指向指针的指针变量。语句“p=p Array”使p指向数组元素p Array[0],而*p为p Array[0]的内容。因为p Array[0]存放的是字符串“One”的首地址,因此输出字符串时,可以直接使用语句“printf("%s",*p)”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈