初始指针

简介: 初始指针

一、何为指针

指针就是变量,变量里面存的是地址,因此,可以说指针就是地址。

image.png


总结:

1、一个小的内存单元是一个字节

2、指针是用来存放地址的,地址是唯一标识一块地址空间的。

3、指针的大小在32位平台是4个字节,在64位平台是8个字节


二、指针和指针类型的意义


image.png

问题:

这个十六进制位能否存放在4个字节的 a 变量里面?


原因:一个十六进制位是4个二进制位-----------16=2^4  (注意是幂!!!),所以两个十六进制位就是8个二进制位,又因为一个二进制位==一个比特位,即8个比特就是一个字节,总共是4个字节,即可以存储


指针类型决定了指针进行解引用操作的时候,能够访问空间的大小

举例:image.png



区分指针类型的两个意义:

1、指针的类型决定了对指针进行解引用操作时,有多大的权限(能够操作几个字节),比如 char* 的解引用操作之能操作1个字节, int* 的解引用操作能够操作4个字节。2、指针类型决定了:指针走一步能走多远(指针的步长)。----------------------指针加减整数

image.png

指针类型的意义:

2、根据具体的需求,设置合理的指针、指针变量!

 

三、野指针

原因一:未被初始化的指针。

举例:


明确概念:局部变量不初始化,默认是随机值。

局部的指针变量不初始化,就被初始化随机值。


原因二:指针越界访image.png

这两种表达方式一样, *p++ ,表示先使用,后加加。

即先让 i 的值赋给 *p,再让p 加加



原因三:指针指向的空间被释放

image.png

局部变量在一个范围内被创建,出这个范围就会被销毁(意味着这一部分的内存空间就会还给系统,不再属于我们了)


四、如何规避野指针


1、指针初始化

image.png

当我们真的真的不知道给指针初始化声明值时,令他等于空指针(NULL),相当于 int a  =0


2、小心指针越界


3、指针指向空间释放使之变成空指针

image.png

当我们不使用 pa 时,令其等于NULL,以防万一。

因此,我们在使用之前需要判断指针是否等于空指针。!


五、指针的运算

1、指针+- 整数

image.png

这个代码用到了指针+-整数,指针的关系运算

 随着数组下标的增加,其地址也对应增加


2、两个指针相加减


指针减去指针:表示两者之间相差的元素个数(前提是两者必须指向同一块空间)

image.png

两个指针相减,表示两者之间相差的个数!!!

相关文章
|
5月前
指针\动态二维数组空间
指针\动态二维数组空间
30 4
|
5月前
指针\分配动态空间-筛选法求质数
指针\分配动态空间-筛选法求质数
33 5
|
6月前
|
C语言
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)1
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)
200 51
|
6月前
|
编译器
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)3
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)
|
6月前
|
编译器
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)2
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)
|
6月前
复制带随机指针的链表【构造链表深拷贝】
复制带随机指针的链表【构造链表深拷贝】
初始结构体
初始结构体
64 0
复制带随机指针的复杂链表
复制带随机指针的复杂链表
|
索引
【那些年那些题】复制带随机指针的链表
【那些年那些题】复制带随机指针的链表
47 0