一.、指针是什么?
定义:
指针就是内存中最小单元的编号 也就是地址
我们平时说的指针 其实是一个指针变量 是用来存放内存地址的变量
内存:
每一块内存都有和它对应的地址
指针变量 我们可以通过&操作符取出一个地址 把地址可以存放到一个变量中 这个变量就是指针变量
它用来存放知识 放进里面的值都按照地址来处理
那么这里有两个问题就要被引出来了
1 一个最小的单元究竟是多大?
2 如何编译地址
对于问题一 我们经过研究规定 一个最小的内存单元是一个字节
对于问题二 我们在三十二位的系统中 假设有三十二根地址线 假设每一根地址线在寻址的时候产生高电平和低电平(1或者0)
那么它们可能产生的数据就是
0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0001
…
…
1111 1111 1111 1111 1111 1111 1111 1110
1111 1111 1111 1111 1111 1111 1111 1111
一共2的32次方个地址
总结
那么讲到这里我们就应该明白了 在32位系统上 地址就是32位数 占用四个字节的大小
在64位系统上 地址就是64位数 占用八个字节的大小
二、指针和指针类型
这里我们在讨论一下:指针的类型
我们都知道,变量有不同的类型,整形,浮点型等。那指针有没有类型呢?
准确的说:有的。
我们存放那个类型数据的地址就要使用什么类型的指针
举个例子 我们要存放int 类型数据的地址 就要使用int * p来存放
char类型的数据的地址就要使用char * p来存放
那么指针类型的意义是什么呢?
让我们带着这个疑问 走进下面的章节
1. 指针±整数
总结: 从这里我们就能看出来 指针的类型决定了指针向前或者向后走一步有多大的距离
2. 指针的解引用
打出上面的一段代码 让我们进入调试模式看看
我们可以发现 它们修改的内容也不一样 这样我们就可以知道
**指针的类型决定了 对于指针进行解引用时能有多大的权限 **
综上
1 指针的类型决定了指针向前或者向后走一步有多大的距离
2 指针的类型决定了 对于指针进行解引用时能有多大的权限
三、野指针
概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
1. 成因
1 .指针未初始化
2. 指针越界访问
3. 指针指向的空间释放
这里的p就是一个野指针 因为前面向内存申请的空间已经释放了
2.如何规避野指针
其实这都是一些套话了 但是还是讲一下吧 大家使用指针的时候注意就好
1 指针初始化
2 小心指针越界
3 指针指向的空间释放 及时防止NULL
4 避免返回局部变量的地址
5 指针使用前检查有效性
四、指针运算
1. 指针+ - 整数
2. 指针 - 指针
先说定义
**指针加减指针得到的是元素的个数 可以是一个负数 **
3. 指针的关系运算
还是这样子 和1中的指针±整数的代码意义
五、指针和数组
首先我们来看以下代码
数组名表示的是数组首元素的地址
所以 这样子写代码就是可行的