一.指针是什么?
二.指针和指针变量的区别
三.指针变量和指针变量的类型及指针的解引用
四.指针加减一个常数表示什么?
五.指针减指针表示什么?
六.什么是野指针及规避的方法
一.指针是什么
先讲指针的概念,指针:是内存中一个最小单元的编号,也是地址,平时口语中说的指针,通常被认为是指针变量。
简单来说的话,指针实际上就是地址。
二.指针和指针变量的区别
我们在对一个变量进行取地址的时候,得到的地址一般会给它保存到一个变量中,此时这个变量就是指针变量
指针变量就是用来存放地址的的变量
三.指针和指针的类型及指针的解引用
1.在我们学习变量的时候都知道变量有不同的类型,例如:char,int,float,double等
指针变量也是一个变量,所以指针也有对应的类型
定义不同类型的指针变量是为了存放不同类型的地址
比如:char类型的指针变量为了存放char类型的地址, int类型的指针变量为了存放int类型的地址
不同类型的指针变量,它们所占的空间都是一样
但在不同的机器中它们占用的空间大小不同
在32位机器中,指针占用的空间大小为4个字节
而在64位机器中指针占用的空间大小为8个字节
指针的解引用
下图可以看出此时a=10
当我们执行完第39行的代码时,可以看出此时a=0,如下图
综上可得出:p此时存的a的地址,表示p指向a,*p实际上可以表示为a,*p=0,就相当于a=0
*p就表示p所指向的目标,可以理解为*p=a
四.指针变量加减一个常数表示什么?
不同类型的指针加减一个常数代表的含义也不同,如下
char类型的指针+1(-1)表示向后(向前)移动1个字节
int类型的指针+1(-1)表示向后(向前)移动4个字节
我们可以看到每个地址之间都隔着4个字节,此时arr[0]=1,arr[1]=0,让我们继续往下执行程序
此时我们可以看到arr[1]=1,显然int类型的指针变量+1表示往后走四个字节
从地址我们就可以看出C0-BC=4,BC-B8=4
总结来说就是:
char类型的指针+1表示向后移动1个字节, int类型的指针+1表示向后移动4个字节
五.指针减指针表示什么?
指针加减指针的含义可以用例如库函数strlen来解释
p-s表示p到s之间一共有多少个元素
当我们需要求一个字符串的长度时可以使用这种方法
六.什么是野指针及规避的方法
野指针:指针指向的位置时不可知的,随机的,不确定的
常见的野指针如:
1.指针未初始化
指针越界访问
当指针指向的空间被释放以后,未及时置0
规避野指针的方法如下
当定义指针的时候初始化
当指针指向的空间被释放以后,要及时置0(p=NULL)
防止指针越界访问
指针使用之前检查指针的有效性