大家好我是小锋今天给大家带来的是指针的讲解
指针是什么?
指针理解的
2
个要点:
1.
指针是内存中一个最小单元的编号,也就是地址
2.
平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量
指针就是地址,口语中说的指针通常指的是指针变量
指针变量
我们可以通过
&
(取地址操作符)取出变量的内存其实就是地址,把地址可以存放到一个变量中,这个变量就是指针变量。
那指针变量的空间有多大?
我们可以通过代码验证
验证后我们发现指针的大小都是四个字节。
(指针的大小在32位平台是4个字节,在64位平台是8个字节。 )
既然如此,每一个指针的大小都是固定的,那是不是就没有必要用到指针类型呢?
让我们继续往下讲解
指针和指针类型
我们知道指针的类型是指向对象的类型
char* 类型的指针是为了存放 char 类型变量的地址。
short* 类型的指针是为了存放 short 类型变量的地址。
int* 类型的指针是为了存放 int 类型变量的地址。
大家想想,这么做的意义是什么?
大家仔细看看以下代码
当指针类型与它所指向的对象类型不一致时用*找到a并改变它的数据时,只改变了一部分这一部分就是指针类型的类型空间大小。(比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。)
所以从这里我们可以理解指针类型就像是一种权限(指针的类型决定了指针向前或者向后走一步有多少字节)
野指针
概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
野指针成因
1,指针未初始化
2,指针越界访问
3,指针指向的空间释放
这里会在动态内存管理时讲解
如何规避野指针
1. 指针初始化
2. 小心指针越界
3. 指针指向空间释放即使置NULL
4. 避免返回局部变量的地址
5. 指针使用之前检查有效性
以上就是全部内容了,如果有错误或者不足的地方欢迎大家给予建议。