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.直接访问物理地址下的数据
嵌入式C——面向对象编程思想库函数实现结构体访问寄存器
Loading...