1、基本概念
作用:可以通过指针直接访问内存
- 内存编号是从0开始记录的,一般用16进制数字表示
- 可以利用指针变量保存地址
2、定义和使用
定义指针
他们的关系就是这样的
运行输出
使用指针
运行输出会发现变量a的值也一起改变了,这是因为在内存中*p和a都是一个内存地址
3、指针所占内存空间
在32位操作系统下占用4个字节,64位下占8个字节
4、空指针和野指针
- 空指针:指针变量指向内存中编号为0的空间,用于初始化指针
- 注意:空指针指向的内存是不可以访问的,因为0~255之间的内存编号是系统占用的
运行后报错,所以我们是没权限访问系统内存的
- 野指针:指变量指向的是非法的内存空间
虽然没报错,但是想一下随便指向一个地址,没有去申请这个地址的权限,有权利操作这个地址吗?
举个栗子:去酒店开房,网上随便订了一间还没有去前台登记,就想进房间,这是不允许的
使用一下运行
注意:在程序中,尽量避免野指针
5、const修饰指针
- const修饰指针---常量指针
- const修饰常量---指针常量
- const即修饰指针,又修饰常量
5.1、常量指针:const 数据类型 * 指针名
指针的指向可以修改,但指针指向的值不可以修改
5.2、指针常量:数据类型 * const 指针名
指针的指向不可以改,但指针指向的值可以修改
5.3、const即修饰指针,又修饰常量:const 数据类型 * const 指针名
指针指向的值和地址都不可以修改
6、指针和数组
- 利用指针访问数组元素
运行后
7、指针和函数
- 利用指针作为函数的参数,可以修改实参的值
值传递
运行后
如果想要main中的a和b也一起交换就要使用地址传递
运行后
因为在swap2方法中都是修改同一个内存地址的值,所以main中的a和b也交换了