> 技术文档 > 嵌入式——C语言:指针①

嵌入式——C语言:指针①

一、指针特点

        1.让代码更加简洁高效

        2.提供直接访问内存的操作

        3.利用指针可以直接操作硬件

二、指针概念

(一)地址:为了区分内存中不同字节的编号(0到2^16-1)

(二)指针:指针就是地址,地址就是指针,指针地址多了指向的概念

(三)指针变量存放指针(地址)的变量(64位操作系统中所有指针变量均为8个字节

三、指针相关运算符

        1.&:取地址运算符,获得变量在内存空间中的首地址

                1.1只有变量(左值(可以写在等号左边))才能&,常量和表达式不能进行&操作

                1.2&构成的表达式为:变量在内存空间中的首地址

                        int Num = 0;

                        &Num:得到Num在内存空间4字节空间中的首地址

                1.3&构成的表达式类型位:变量的类型升级后的类型

                        int Num;

                        &Num:int -> int *

        2.*:获得指针指向的空间,或者对应空间中的值

                2.1*运算符连接的内容必须为指针类似,不能是普通变量类型

                2.2如果直接使用*对应的表达式,表达式值为:该指针指向空间中的值

                        *&Num;        //获取&Num指向的空间中int类型的值

                2.3如果使用*对应的表达式其类型为:指针类型降级后的类型

                        int *p;

                        *p;//int * -> int

                2.4*对应的表达式作为左值表示,将等号右边的值放入指针指向的空间

四、指针变量的定义

                不能使用未初始化的指针

(一)存储类型 数据类型 *变量名

(二)野指针

        定义:未经初始化的指针或者指向已经被释放空间的指针

(三)空指针(NULL)

        定义:指向内存空间为0x0的指针称为空指针 

         内存地址0x0空间为只读空间,不能复制,NULL指针不能执行*p = value操作

五、指针特性

        变量的访问形式

(一)直接访问:通过变量的变量名访问变量空间

(二)间接访问:通过变量在内存中的地址访问变量空间

六、指针的算术运算

(一)算术运算符

        指针偏移的大小由指针指向的数据类型大小决定

        两个指针相减:两个地址间相减数然后除数据类型

(二)不同指针类型之间的区别

        1.*操作时处理方式不同

        2.算数运算

六、指针常见操作

        注意:指针有两个需要请注意的概念:指针变量的本身,指针指向的空间。

                1.对指针变量:p或者q修改,改变的是指针的指向

                2.对*p或者*q:改变的是指针指向的空间,但是它的指向是不变的

七、指针作为函数参数

(一)值传递

        1.实参将值传给形参,形参值改变

        2.函数体内部想使用函数体外部变量值的时候,使用值传递

(二)地址传递

        1.实参将地址传递给形参,形参是指向实参的指针,可以利用形参修改实参的值

        2.函数体内部想修改函数体外部变量的值的时候,使用地址传递

八、练习