嵌入式从0到精通——C语言指针

📅 2026/8/4 18:13:36
嵌入式从0到精通——C语言指针
指针内存程序运行过程中可以访问到的存储空间计算机为了方便对内存的管理以字节为单位对内存进行编号地址计算机管理内存是给内存的编号指针指针即为地址地址即为指针指针指向了一个具体的空间指针变量变量保存地址的变量需要占用内存空间1.指针基础1.指针变量的定义基类型 *变量名基类型该指针指向的空间存储的数据的数据类型int、char、float、double、void、构造数据类型*类型说明符说明后面的变量是一个指针变量名遵循标识符的命名规则p开头pmaxptmpint *pint;char *pch;int *pi*pj;指针变量保存的地址是该指针保存变量的首地址。sizeof(指针)在64为计算机系统下指针在内存中占用8字节。在32为计算机系统下指针在内存中占用4字节。2.指针变量的初始化和赋值int *pNULL;int *pnum;pnum;野指针未初始化或赋值的一个指针或者指向一个已经释放内存空间的指针。避免野指针1.给指针初始化为空指针NULL(0)。2.给指针初始化成已有的变量的地址。3.指针运算符指针运算符用来访问指针变量指向的内存空间中的数据*指针变量————指针降级为变量类型————基类型的变量int *p;p ——int **p——intchar *pch;*pch———char注意1. * 指针运算符只能放在指针变量的前边。2. *指针变量方位指针变量指向的数据该表达式降级为变量类型——基类型的变量3.*指针变量访问的字节数取决于定义该指针时的基类型char *p *p——char ——访问1字节int *p *p——int ——访问4字节double *p *p——double ——访问8字节 取地址运算符变量名;1.只能给一个变量取地址不能给常量或者表达式取地址2.给某个变量取地址时获取的是这个变量首字节的地址4.指针的算数运算 - / * % -- - * %对于指针运算无意义-指针1-指针2表示两个指针之间间隔的元素个数地址之间的字节差/sizeof(基类型)指针1表示从当前地址向后偏移sizeof(基类型)个字节-- 指针-1表示从当前地址向前偏移sizeof(基类型)个字节char *p; p1———向后偏移1个字节int *p; p1———向后偏移4个字节2.指针作为函数参数1.被调函数中想要修改主调函数中定义的变量传递该变量的地址。2.被调函数中想要使用主调函数中定义的变量可以传递值也可以传递地址。3.被调函数想要返回多个结果时可以传递主调函数定义的变量的地址地址指向的空间可以保存被调函数得到的结果3.指针和一维整型数组数组的数组名为数组的首元素地址。注意1.数组名为地址常量右值不能为其赋值a a[0]a[0]——*aa[1]——*(a1)a[2]——*(a2)a[3]——*(a3)a[n]——*(an)一维整型数组作为函数参数传递void printf_array(int a[],int len){}void printf_array(int *pa,int len){}