type
status
date
slug
summary
tags
category
icon
password
区别于上课或者做题学的指针,本文从实际应用的角度理解指针
一、指针
指针就是指针变量,指针变量里存的是地址,指针可以说就是地址,指针是指向该地址里的数据,比如
int n=3,int *p=&n
表示p是指向n的指针。二、指针和数组的关系
数组名就是指针,完全等价。
访问数组或者其他数据类型不能越界,即不能访问没有定义或者分配的地址。
至于定义一个int型数组a,a++地址会跨越四个字节,解引用会得到a[1]的值,但是中间的三个地址处于未定义状态,可能是之前存储在那里的任意值,也可能是垃圾值。
三、指针的作用
1.调用子函数,直接传递指针,可以节省内存,不然就是复制一份,再把复制的传给子函数。为了防止在子函数里更改传过来的地址里的值,可以用
const
。const具有只读功能。2.实现多返回值,传递指针,在子函数解引用,不用int型的函数返回,直接在子函数对传过来的地址里的值进行修改,主函数同步修改。
下面这个是strcpy函数的例子,传入的是两个参数,一个是char *,传入的是可以更改的str1[20]的数组首地址,一个是const char *,传入的是可以更改的str2[]的首地址。
3.传递函数句柄
4.将复杂类型数据转换成字节传输
对于串口传输时一个字节一个字节传输,而float类型数据并不方便字节传输
如定义float a=12.345,float类型数据占用四个字节,但是时经过编码后再存储的,如科学计数法等。
方法就是把float数据看作为数组。发送四个字节,如此时的a占用四个字节分别是
Airdata[]=1f,85,45,41
,再用float*强制类型转换把数组解码得到最后的float。5.直接访问物理地址下的数据
- 作者:Torah
- 链接:https://tangly1024.com/article/%E9%87%8D%E6%96%B0%E8%AE%A4%E8%AF%86%E6%8C%87%E9%92%88
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。