代码改变世界

day4指针

2019-05-21 21:34  Maoey  阅读(206)  评论(0)    收藏  举报

首先谈到指针就要先谈到内存
内存存储器是由一个个字节组成的,每个字节都一个编号,这个编号被称为地址,并且内存中字节的排序是连续的


两张是在不同操作系统中实现的相同代码 由此对比指针的字节长度是由操作系统决定的32位字节长度为4,64位则为8.
指针就是用来存储地址的变量也被称为指针变量
定义指针变量
类型标识符 * 变量名;
初始化
例如:int x=10;*p=&x;
或者 int *p,x=10;p=&x;
对于定义多个指针变量时
int p,x;这种情况就是只定义了一个指针变量p而x还是int类型的变量
应该int p,x;
因为不初始化的指针是很危险的所以一般不确定时要初始化位空指针(NULL)
其中在c语言中使用变量由两种方法一种是对变量直接操作称为直接访问,另一个就是通过地址来找到要访问的变量再引用变量,称为间接访问。
通过指针变量访问内存称为解引用:
指针变量

注意有两种含义其中在定义指针时表示变量的身份说明他是指针变量,其他情况表示对指针的解引用。
int num=10;
int p=#
这里
p《=》num。
这时候改变
p的值后就是在改变num的值

同类型的指针可以进行赋值,不同类型的指针不能赋值
这里也要注意要用相同类型的指针来指向相同类型的数据不然就会出现以上的错误

这里提出野指针和空指针
空指针指的是指针变量的值为NULL。这里空指针也是一种错误标记,当函数返回值为NULL时表示函数执行出错。
注意在大多数系统中NULL就是0地址,二零地址存储的是系统复位时的一些数据,所以如果直接对空指针进行解引用会导致段错误。
所以在使用未知指针时要注意是都是空指针
野指针:则是内存储的值是不确定的
所以更加危险可能会导致的后果可能是一切正常,段错误,脏数据。
我们无法通过条件判断只能通过代码进行分析。
首先野指针是人为定义后不要的,所以不制造就不会有避免制造野指针的方法:
1.定义指针一定初始化。
2.函数不返回局部,块变量的地址。
3.当一块堆内存被释放后,指向他的指针应该立即置空。

指针的计算
这里我们利用出程序来直观的看

可以得到指针+-整数=指针+-类型宽度*整数

实际上是指针-指针=(指针-指针)/类型宽度
其他指针的计算没有什么具体意义所以不进行介绍