指针
- 作用:
可以通过指针间接访问内存
记录指针地址编号
即指针就是一个变量的地址
- 定义一个指针:
语法:
数据类型* 指针变量名
PS:数据类型要和被查询的指针变量相同
- 指针的使用:
1.“&”取值符的使用
eg:通过定义一个指针变量p取变量a的地址
int a;
int* p = &a;
2.”*”解引用的使用
解引用就是把指针对应的值表达出来
eg:int a = 10;
int* p = &a;
cout << *p <<endl;
此时运行则会输出指针变量p对应的变量的值,也就是a变量的值 10
- C++中指针所占内存长度
在32位(x86)系统中指针通常占四个字节长度
在64位(x64)系统中指针通常占八个字节长度
空指针
- 定义:
指针变量指向内存中编号位0 的指针
- 用途:
用于初始化指针变量
补充:
空指针不可访问,即在0~255之间的内存编号是系统占用的,不可访问
野指针
定义:
指针变量指向非法空间
空指针和野指针都不是我们申请的空间,因此不要随意访问空指针和野指针
const修饰指针
- 类型:
- const修饰指针——常量指针
- const修饰变量——指针常量
- const既修饰指针又修饰变量
- const修饰指针
语法:const 数据类型 * 指针变量名
特点:指针指向可以修改,但指针指向的值不可修改
- const修饰常量
语法:数据类型 * const 指针变量名
特点:指针指向不可修改,但指针指向的值可以修改
- const既修饰指针又修饰变量
语法:const 数据类型 * const 指针变量名
特点:指针的指向和指向的值都不可以修改
指针和数组
作用:
利用指针访问数组中的元素
eg:int arr [];
int * p = &arr;
此处arr代表数组的首地址
指针和函数
一、作用:
利用指针和函数作参数,进而实现对函数实参的值进行修改
二、例题:
利用函数写一个交换两个变量的值的函数:
当不使用指针时,我们先分文件编写一个函数exchange:
然后再源文件中使用函数尝试交换变量a和变量b
此时使用函数进行交换
此时我们发现实参的值并没有发生交换
接下来我们尝试使用指针修改函数:
此时我们再次使用函数进行交换操作
此时,我们发现,函数实参的值进行了交换
原理:
使用指针后,解引用时找到指针指向的值,而函数中形参和实参的指针所指向的内存时相同的,所以在修改指针指向的值时,实参指针所指向的值会发生改变,进而间接地修改了实参变量的值。