chunlanse2014

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

第十四节 指向指针的指针(十五)

如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。在前面已经介绍过,通过指针访问变量称为间接访问。由于指针变量直接指向变量,所以称为“单级间址”。而如果通过指向指针的指针变量来访问变量则构成“二级间址”。


怎样定义一个指向指针型数据的指针变量呢?如下:

    char **p;

p前面有两个*号,相当于*(*p)。显然*p是指针变量的定义形式,如果没有最前面的*,那就是定义了一个指向字符数据的指针变量。现在它前面又有一个*号,表示指针变量p是指向一个字符指针型变量的。*p就是p所指向的另一个指针变量。

从下图可以看到,name是一个指针数组,它的每一个元素是一个指针型数据,其值为地址。name是一个数组,它的每一个元素都有相应的地址。数组名name代表该指针数组的首地址。name+i是mane[i]的地址。name+i就是指向指针型数据的指针(地址)。还可以设置一个指针变量p,使它指向指针数组元素。p就是指向指针型数据的指针变量。


如果有:
  1. p=name+2;
  2. printf(“%d\n”,*p);
  3. printf(“%s\n”,*p);
则,第一个printf函数语句输出name[2]的值(它是一个地址),第二个printf函数语句以字符串形式(%s)输出字符串“Great Wall”。

【例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 }
复制代码

 

说明:p是指向指针的指针变量。

【例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   chunlanse2014  阅读(144)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示