第十四节 指向指针的指针(十五)
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。在前面已经介绍过,通过指针访问变量称为间接访问。由于指针变量直接指向变量,所以称为“单级间址”。而如果通过指向指针的指针变量来访问变量则构成“二级间址”。
怎样定义一个指向指针型数据的指针变量呢?如下:
怎样定义一个指向指针型数据的指针变量呢?如下:
char **p;
p前面有两个*号,相当于*(*p)。显然*p是指针变量的定义形式,如果没有最前面的*,那就是定义了一个指向字符数据的指针变量。现在它前面又有一个*号,表示指针变量p是指向一个字符指针型变量的。*p就是p所指向的另一个指针变量。
从下图可以看到,name是一个指针数组,它的每一个元素是一个指针型数据,其值为地址。name是一个数组,它的每一个元素都有相应的地址。数组名name代表该指针数组的首地址。name+i是mane[i]的地址。name+i就是指向指针型数据的指针(地址)。还可以设置一个指针变量p,使它指向指针数组元素。p就是指向指针型数据的指针变量。
如果有:
- p=name+2;
- printf(“%d\n”,*p);
- printf(“%s\n”,*p);
【例10-36】使用指向指针的指针。
1 main() 2 { 3 char *name[]= 4 {"Follow me", 5 "BASIC", 6 "Great Wall", 7 "FORTRAN", 8 "Computer desighn" 9 }; 10 char **p; 11 int i; 12 for(i=0;i<5;i++) 13 { 14 p=name+i; 15 printf("%s\n",*p); 16 } 17 }
【例10-37】一个指针数组的元素指向数据的简单例子。
1 main() 2 { 3 static int a[5]={1,3,5,7,9}; 4 int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; 5 int **p,i; 6 p=num; 7 for(i=0;i<5;i++) 8 { 9 printf("%d\t",**p); 10 p++; 11 } 12 }
posted on 2015-04-06 17:19 chunlanse2014 阅读(142) 评论(0) 编辑 收藏 举报