二级指针:可以理解为指向指针的指针,存放的是指针变量的地址。

下面用一级指针来保存一个指针变量的地址;

#include<stdio.h>

int main()
{
int *p1;
int *p2;
int data;
p1=&data;
p2=&p1;
printf("p1保存的地址=%p\n",&data);
printf("data=%d\n",*p1);
printf("p2的地址=%p\n",&p2); return 0;
}

输出结果:

p1保存的地址=000000000061FE0C
data=0
p2的地址=000000000061FE10

现在使用二级指针来实现同样的功能:

#include<stdio.h>

int main()
{
// int *p1;
// int *p2;
// int data;
// p1=&data;
// p2=&p1;
// printf("p1保存的地址=%p\n",&data);
// printf("data=%d\n",*p1);
// printf("p2的地址=%p\n",&p2); int data;
int *p1;
int **p2;
p1=&data;
p2=&p1;
printf("p1保存的地址=%p\n",&data);
printf("data=%d\n",*p1);
printf("p2的地址=%p\n",p2);
printf("data=%d\n",**p2); return 0;
}

输出结果:

p1保存的地址=000000000061FE14
data=0
p2的地址=000000000061FE08
data=0
二级指针和二级数组避坑

#include<stdio.h>
/*
野指针是指向位置随机的(乱指一气),错误的指针,系统无法对其进行操作。野指针指向的值是非法的内存地址,指向的内存是不可用的。
*/ int main()
{
//二级指针和二维数组避坑
int scores1[3][4]={
{10,20,30,40},
{50,60,70,80},
{90,100,110,120}
};
//定义一个二级指针
int **p1;
p1=scores1;
printf("p1:%p\n",p1);
printf("scores1:%p\n",scores1);
printf("*p1:%p\n",*p1);//*p1是一个野指针,不是我们认为的会变成列地址
**p1=2200;//修改scores[0][0]
printf("done\n"); return 0;
}

如果想让一个二级指针p指向一个二级数组,那么*p不是你认为的二维数组的列地址,而是一个野指针,是无法对二维数组进行操作的。如果想对二维数组修改。,可以通过使用

数组指针来指向二维数组的地址,再让二级指针指向数组指针的地址,而不能直接让二级指针指向一个二维数组。

#include<stdio.h>

int main()
{
int scores2[3][4]={
{10,20,30,40},
{50,60,70,80},
{90,100,110,120}
};
//定义一个二级指针
int **p2;
//定义一个数组指针
int (*p3)[4]=scores2;
//让二级指针指向数组指针地址
p2=&p3;
printf("p3:%p\n",p3);
printf("scores2:%p\n",scores2);
//修改scores
p2[0][0]=120;
printf("scores2[0][0]:%d\n",scores2[0][0]);
return 0;
}

输出结果:

p3:000000000061FDE0
scores2:000000000061FDE0
scores2[0][0]:120

虽然可以实现,但是不建议这样使用,而且编译器也在编译的时候也会抛出警告。

最新文章

  1. 使用mysqlslap对mysql进行压测,观察Azure虚拟机cpu使用率
  2. $_session (应用)
  3. CentOS 7 网络配置
  4. 【BO】为WEBI报表添加自定义字体font
  5. CSS伪类和伪元素
  6. 学习Word2vec
  7. 黄聪:使用WORDPRESS自带AJAX方法
  8. ASP.NET导出EXCEl方法使用EXCEl对象
  9. play框架概述
  10. pdf解析与结构化提取
  11. YARN简述
  12. 【python35小工具】b站弹幕保存
  13. unity中将多张图片进行椭圆运动
  14. 【紫书】Ordering Tasks UVA - 10305 拓扑排序:dfs到底再输出。
  15. 【原创】&lt;Debug&gt; QString
  16. adb push和adb install区别
  17. GitHub没有实时通知怎么办?当然是自己上手写一个啊!
  18. error:No buffer space available (maximum connections reached
  19. [动态库]动态库生成和使用以及Makefile编写
  20. consul Consul vs. ZooKeeper, doozerd, etcd

热门文章

  1. 一文快速上手 Nacos 注册中心+配置中心!
  2. 端口安全 | DHCP snooping
  3. JUC锁:核心类AQS源码详解
  4. KingbaseES V8R6单实例外部备份故障案例
  5. jenkins流水线部署springboot应用到k8s集群(k3s+jenkins+gitee+maven+docker)(2)
  6. 【疑难杂症】奇异值分解(SVD)原理与在降维中的应用
  7. 8Hello world
  8. TomCat之安装
  9. IDEA生成带参数和返回值注释
  10. 通过QQ抓IP查询地址