嵌入式-C语言基础:二级指针
2024-09-08 15:55:57
二级指针:可以理解为指向指针的指针,存放的是指针变量的地址。
下面用一级指针来保存一个指针变量的地址;
#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
虽然可以实现,但是不建议这样使用,而且编译器也在编译的时候也会抛出警告。
最新文章
- 使用mysqlslap对mysql进行压测,观察Azure虚拟机cpu使用率
- $_session (应用)
- CentOS 7 网络配置
- 【BO】为WEBI报表添加自定义字体font
- CSS伪类和伪元素
- 学习Word2vec
- 黄聪:使用WORDPRESS自带AJAX方法
- ASP.NET导出EXCEl方法使用EXCEl对象
- play框架概述
- pdf解析与结构化提取
- YARN简述
- 【python35小工具】b站弹幕保存
- unity中将多张图片进行椭圆运动
- 【紫书】Ordering Tasks UVA - 10305 拓扑排序:dfs到底再输出。
- 【原创】<;Debug>; QString
- adb push和adb install区别
- GitHub没有实时通知怎么办?当然是自己上手写一个啊!
- error:No buffer space available (maximum connections reached
- [动态库]动态库生成和使用以及Makefile编写
- consul Consul vs. ZooKeeper, doozerd, etcd