C语言指针讲解

c语言可以说是工科学生必不可少的编程语言了,尤其是嵌入式的应用中c语言更是大厦之基,甚至在我的评价里他相比于数学对于工科生的作用等价。
在学习c语言之初就有一个说法是:学明白了指针,就学明白了c语言。那么什么是指针?
在计算机中,所有的数据都是存放在存储器中的,不同的数据类型占有的内存空间的大小各不相同。内存是以字节为单位的连续编址空间,每一个字节单元对应着一个独一的编号,这个编号被称为内存单元的地址。
如果说把存放数据的空间当作我们家的小区,那么地址就像是门牌号,每家每户的地址都是唯一且固定不变的。
此时如果有一名访客来找你,你可以告诉这位访客你家的地址,也就是门牌号。访客可以直接通过门牌号来找到你。
在c语言中我们可以通过 & 来获得门牌号也就是变量的地址。并且可以通过 * 去访问这个地址,并进行修改,这叫做引用 与 解引用。
图1 变量的地址与访问
当然也有除了直接寻找门牌号之外,还有一种方式找到你家——问路当你到你朋友的小区时,你不知道朋友住哪里,但是朋友刚刚玩完钢铁雄心没注意时间现在睡着了,那么你可能会询问门口保安:nt的家住哪?保安会说:nt住某某幢某零某。此时这个nt的家起到了和一个门牌号一样的作用或者说nt从某种意义上来说他和nt家的地址是等价的。
而c语言中,nt的家等价于nt家的地址,这叫做指针。指针是一种类型,他的作用就是指向变量的地址并可以读取和修改。
首先,使用指针的前提是变量已经存在(还有一种空指针null),就像如果nt不在小区买房,那么门口保安肯定是不知道nt的家在那的甚至会不让你进小区(系统报错)。
图2 通过指针访问
此时int * nt = &home 就像是小区业主在登记信息,向大伙说明,这个地址是nt的家,你可以直接问nt的家在哪来访问我。
使用 变量类型 + * + 指针名 = & 变量名的方式来定义和声明变量,注意的是,指针类型必须进行初始化,哪怕是你说不进去找人,只是空逛逛小区,也就是空指针 如 int * nt = null;
既然可以通过nt这个别称来寻找到nt的家,那么同理一个地址可以被多个指针所指向(可能是nt老婆的名字,nt儿女的名字)
图3 多个指针访问一个变量
那么指针的作用是什么呢?
指针最基本的一个作用是值传递和地址传递。通常我们在定义一个函数的时候,其变量类型是数据变量,如下图所示,x和y的类型都是int,这个a和b叫做行参,即我们在定义函数的时候写的参数,而当我们调用这个函数的时候,传入的参数x和y叫做实参。
图4 行参与实参
那么a,b,x,y到底是什么关系呢?其实我们可以观察他们的地址,我们发现,实际上我们将x,y传入函数的时候,函数新创建了两个变量a 和b
来存放我们x和y的数据并进行运算,等到这个函数运行完毕再释放掉a和b这两个数据(拆迁)
图5 行参与实参的地址
而当我们在函数中改变a和b的值的时候,x和y的值并没有发生改变(抓周树人,管我鲁迅什么事?)
然鹅,当我们把函数的数据类型换成指针时,我们就可以在函数中改变外部实参的值。事实上函数中也创建了一个形参,不过这个形参的是一个指针类型的(和实参类型相同)而他和我们传入的实参所指向的地址是同一个地址,因此我们通过解引用行参来修改实参的值。我们把这种叫做地址传递,意思是将指针(变量的地址)作为数据传入函数。
图6 地址传递

超频三:拟终止“5G散热工业园建设项目”项目
LGG8ThinQ美国发售 售价约合人民币5500元
电容式电压互感器与电磁式电压互感器的优缺点
华为“IPv6+城市云网”快速实现特殊场景网络互连
一种用于FPGA的改进算法弱化了方波重影
C语言指针讲解
选择合适示波器带宽方法
接触器式继电器的端子和接法介绍
微软基于ARM的新机Surface Pro X开售,最高售价为1799美元
浅谈大功率LED及其应用
物联卡商城:前景大好的物联网卡,到底有什么用?
AIGC立法和相关版权案例分享-“心寄源”法律沙龙(2023第五期 | 总第十期)成功召开
FPGA电源系统设计师面临的设计复杂性和不确定性根源浅析
车电子电气系统开发简化总结
智能改造浪潮大势所趋 全民迈向“机器人时代 ”
镍镉电池如何保养?
大能量电池系统的起火和复燃
微博Push系统的发展历程,如何利用机器学习进行热点挖掘以及个性化推荐系统的模型升级之路
AIGC的基础及各行业应用拆解
回顾驭势助力合作伙伴推出量产无人驾驶微循环小巴的性能分析和介绍