网站首页 > 开源技术 正文
指针和数组应该算是C语言的精华及难点,很多初学者都是被这一章节难倒的,包括作者在内,也不敢说在指针上就真的全懂了。只能在此抛砖引玉,希望讲讲基础知识,有大神看到了能够扩展高级应用。
在介绍数组和指针之前,大家可以先思考三个问题,这三个问题也是我在读书得时候学习C语言得时候老师提的,学习的时候可以带着问题去学。
第一个问题,什么是指针;
第二个问题,什么是数组;
第三个问题数组和指针之间有关系吗?
如果能准确回答出这三个问题的孩童,这篇文章不用看了,基本的指针和数据你都会了,你可以找更深入的相关资料研究。
什么是指针?
指针定义:int *p
这是大家经常看到的定义方式,就是定义一个指针P,那么好了,接下来就有两个问题需要解决了,指针定义好后,哪个是指针指向的地址,如何读取指针指向的地址内的存储值?
我们假设int*p定义在8bit-C51单片机的应用环境下,我们都知道8bit单片机总线是16bit,所以int*p指针指向的地址也是16bit的,所以这个指针笼统的意思就是在单片机的存储空间找一个2byte的存储位置(这里注意,如果是单片机专业的学生,按上述定义的指针的话,其实这个指针可以定义为ROM/RAM/XRAM的任何一个,所以应用中定义最好明确定义位置,怎么定义后续单片机知识再介绍),用来存储指针数据,这2byte位置的起始地址就是指针指向的地址。
我们作个类比来理解指针,如果我们把指针指向的存储空间看作酒店的某个房间,那*看着像不像一把锁的钥匙孔,很像吧, *是锁孔的话,那P是什么就不言而喻了,那是门,也就是进入房间里的门,你看酒店的门是不是都有编号呢,同样的我们存储空间也是有编号的,这个编号就是存储空间的地址,这样说来大家是不是就比较清晰的了解了指针的意思了呢?
所以,回归int*p定义,我们把P叫做指针变量,其里面存储的是存储空间的地址,千万注意不要把P当作存储空间的值。在8位单片机中int*p的P是16bit大小。*p才代表整个房子里的东西,也就是代表存储空间的数据,int就是定义这个房子多大,也就是*p能读取出来的数据长度。
举个简单的例子,定义一个指针,指向单片机xram空间地址0x1000如下图
定义int*p = (int*)0x1000;
那么:P = 0x1000;*P = 0X1122;
留个问题,定义unsigned char *p = (unsigned char *)0x1001,那么P是多少,*p又是多少值呢?
注意:指针变量P的占位大小(占多少位空间),只跟单片机的总线宽度有关(如果是计算机的话,可能跟计算机的位数有关,不专业,不作介绍),相关知识如果有机会后续单片机再介绍。
本章节适合初学者了解指针的基本定义,至于更深入的,比如指向指针的指针,指向函数的指针等等,后续有机会再跟大家进一步讨论。下一章节将介绍一下数组的概念。有兴趣的可以点赞关注。
猜你喜欢
- 2025-08-02 编写汇编语言常见错误分析
- 2025-08-02 HC89S003P 20引脚8位ADC型FLASH单片机
- 2025-08-02 基于51单片机的万年历
- 2025-08-02 基于AT89S51单片机接口电路的时序仿真研究
- 2025-08-02 MON-51单片机仿真器使用手册
- 2025-08-02 重要提醒,单片机发展史,它到底是一个什么东西
- 2025-08-02 keil软件是干嘛的?keil软件怎么用?
- 2025-08-02 51单片机多机通信系统实现方法
- 2025-08-02 红外遥控发射程序,stc红外遥控c51程序,智能家居控制
- 2025-08-02 三相异步电机点动控制改造成西门子PLC程序
你 发表评论:
欢迎- 08-032025年Linux可视化面板深度评测:从新手到企业级维的全能工具
- 08-03自学学习网络安全,渗透测试的环境搭建总结
- 08-03夏日“打卡”:一场集体“情绪漂移”的实验?
- 08-03PHP 8.3 JIT 深度优化:让图像处理性能超越C++(附压测数据)
- 08-03「推荐」收藏过千,给新手的7个入门php实战项目
- 08-03PHP内存池分析
- 08-03PHP 性能分析与实验——性能的宏观分析
- 08-03空开上的DZ47是什么意思?6000A是什么电流?
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)