指针变量可以用来存储记录地址数据,他可以根据记录的地址数据来找到来源的存储区
没有记录有效地址的指针变量不能使用
有效指针前使用*操作符可以找到地址对应的存储区
声明指针变量时的类型名称代表他捆绑存储区的类型,不同类型的指针适合与不同的存储区捆绑
没有捆绑过的指针分成两类:
1:空指针;里面记录了空地址用NULL表示,地址的数据就是0
2:野指针;其他没有捆绑过的指针
程序中禁止出现野指针;所有的指针必须就行初始化(避免野指针的出现)
指针初始化的时候*没有参与初始化过程(用来声明),被修改的仅仅是指针本身的存储区
指针和存储区的捆绑关系在程序执行过程中可能会不断变化
可以把指针看作变量的某种身份,可以使用指针实现针对身份编程
如果把数组中第一个存储区的地址记录在指针变量里,就可以根据这个指针找到数组里的每个存储区
这个时候可以认为指针间接捆绑了数组里的每个存储区
在指针后使用下标就可以表示数组里的某个存储区
地址数据只能参与如下的计算
地址 + 整数;
地址 - 整数
地址 - 地址
地址数据加减整数n实际加减的是n个捆绑存储区的大小
地址减地址的结果是一个整数,这个整数表示两个地址之间包含的捆绑存储区个数
数组里第一个存储区的地址加下标n可以计算出下标为n的存储区地址
所有跨函数使用存储区必须通过指针实现
数组做形式参数的时候就是一个指针
函数可以把一个存储区的地址作为返回值使用,这个时候他需要提供一个指针类型的存储区记录这个返回值
声明指针变量的时候可以使用const关键字
如果声明指针变量的时候把const关键字写在类名称前就表示不可以通过这个指针对捆绑存储区进行赋值;这个指针本身就可以赋值 const int *p
所有的指针形式参数都尽量采用这种方式加const关键字声明
声明指针变量时可以在指针变量名称前加const关键字
不可以对这种指针做赋值,但可以对他所捆绑的存储区赋值 int * const p
可以在声明指针变量时使用void作为类型名称,这种指针叫做无类型指针
这种指针可以和任意类型存储区捆绑
无法通过无类型指针了解捆绑存储 的类型
不应该在无类型指针前面直接加*或者对这种指针加减计算
这种指针需要首先强制转换类型成有类型指针,然后才能使用
无类型 通常作为函数的形式参数使用,可以通过他把任意类型的存储区传递给被调用函数