一、指针
变量的指针就是变量的地址。存放变量地址的变量是指针变量,它用来指向另一个变量。
二、定义指针变量
定义指针变量的一般形式为
基类型 *指针变量名;
注意
(1)指针变量前面的“*”表示该变量的类型为指针型变量。指针变量名是 pointer_1、pointer_2,而不是*pointer_1、*pointer_2。这是与定义整型或浮点型变量的形式不同的。
(2)在定义指针变量时必须指定基类型。
理解可以如下
- 整形是用来装整数的数据类型
- 指针是用来装地址的数据类型
- 想要通过指针来访问某个指向的变量
三、直接和间接访问
3.1为什么间接访问
是因为有时间直接访问,访问不到,比如不能在被调函数中不能修改主调函数(值传递)
作用
为了在被调函数里面修改主调函数
注意
- 野指针(疯指针)(保存的是随机数)
- 这个地方的指向的是一个不确定值,具有随机性,不明确空间,会不安全。
- 在使用指针变量之前,要清楚指针变量指向谁。
- 类型要匹配。
3.2 指针变量的引用
有两个有关的运算符:
(1)&:取地址运算符。
(2)*:指针运算符(或称“间接访问”运算符),取其指向的内容。例如,&a为变量a的地址,*p为指针变量p所指向的存储单元的内容(即p所指向的变量的值)。
3.3 编译器对其操作过程
- 通过指针变量中的值到内存空间中定位;
- 从定位处开始向后偏移sizeof(基类型);
- 将偏移好的那部分内存空间当作是一个基类型变量来看
四、应用
1、指针变量作为函数参数
函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中,实现被调函数来修改主调函数。
2、数组
(1)下标法,如a[门形式;
(2)指针法,如*(a+i)或*(p+i)。其中a是数组名,p是指向数组元素的指针变量,其初值 p=a。
注意
对指针进行加1操作,并不是在原有的基础上加1,而是在加的(sizeof(基类型))刚好是第一个地址最后一个字节的下一个。
常见错误
数组的首元素地址,不能加加的原因,是因为是常量,常量不能加加。
3、考题
3.1.1、*&i(相遇之后相互抵消)
3.1.2、测大端小端
3.1.3、强制类型转换
4、空指针
对指针置为空,代表的是指针的一种状态,表示当前状态不可访问。
所以使用的时候进行判断
5、不使用循环实现打印