1、内存地址
用户在程序中定义了一个变量,对程序进行编译时,系统就会给这个变量分配内存单元,内存区的每一个字节都有一个编号,这就是内存地址,相当于旅馆的房间号,内存地址所表示的内存单元中存放的数据就相当于这个房间住的旅客,假设内存地址0x00000028中存放了一个字节的数据0x28,那么如果我找到了这个内存地址,也就相当于我查到了这里面的数据0x28,可以说地址指向该变量的单元,因此,将地址称为了指针,意思就是说通过它可以找到以它为地址的内存单元。2、指针变量与指针
一个变量存放的地址就称为该变量的指针,如果有一个变量专门用来存放另一个变量的地址,那这个变量就称为指针变量,指针变量的值是地址。3、指针变量的定义:通常在变量名前面加一个“*”就代表这是一个指针变量,如下图所示。
第9行和第10行都是定义了一个名为num的字符型指针变量,不过推荐使用第10行的定义方式,如果不进行地址初始化,就会成为所说的野指针(就是不知道指向哪个位置了)。4、指针变量的赋值:指针变量的赋值如下图所示。
首先定义了一个指针变量num,然后定义了一个变量a,并设置a的值为0xaa,现在将a的地址传给num,这就有了第11行的语句,其中&代表取址,即获取变量a所在的地址,此时可以将num指向的数据打印出来。
此时程序的运行结果如下图所示。
显然,此时指针变量指向的地址是007cf80b h,这个内存单元中存放的数据为100,就是变量a的初始值。
5、指针变量的使用
现在来进行一个实验,将变量a的值和变量b的值交换,程序如下图所示。
程序运行结果如下图所示。
现在思考这么一个问题,为什么交换两个数据要使用指针的方式呢,定义全局变量不是也可以达到这个效果吗?首先全局变量在编程的过程中要保证越少越好,因为全局变量的命名规则是不允许重复的,全局空间因为处于最顶层也是最大的命名空间里,所以变量名要保持独立,不冲突,就需要更完整的表达它的含义,所以名字就会更倾向于写的很长。全局变量数量越多,取名的难度就会更大,其次,有的时候全局变量太多会有一些莫名其妙的bug,但是即想要少用全局变量,又要达到数据共享的目的要怎么办。 这就有两种途径,一种是子函数的返回值,另一种就是指针,调用子函数的返回值会耗费掉一部分时间,这个时间在计算机编程中获取可以忽略不计,但是在后续的单片机编程中就会格外显眼,一般为了保证控制系统的实时性,一些重要的代码都会放在中断里执行,此时,只需要用指针指向对应的内存地址,需要的时候读一下即可,指针可以定义成局部指针变量,也就解决了全局变量过多的问题。
关于工业RFID刀具识别系统应用实例的分析
闭合导线的坐标计算表
单片机能够正常工作的必须条件有:电源、下载电路
摩托罗拉计划宣布与万宝龙合作制造的可折叠智能手机的特别版
机器学习将改变商业智能分析应用
C程序设计基础-指针
电池储能安全传感器解决方案,对动力电池热失控进行监控
iPhone销售遭遇困境,PCB厂商积极开拓非苹订单趋势明显
谈谈小功率电源变压器的初级空载电流
一位资深前端工程师的总结
分析预测未来人工智能领域的行业生态及应用
如何使用protel电路设计软件设计高速PCB
C语言文件编程操作
针对SN74CB3Q3384A总线开关的Ioff曲线分析
Sony OLED 电视面板和屏幕发声“黑科技”居然都来自 LG
glō与Kyocera合作开发1.8英寸Micro LED
vivo X30系列5G手机已在广西桂林正式发布
共建共享仍是5G主题词
德国否认在5G领域与华为合作
放大器芯片有哪些 放大器芯片是否影响电流大小