作用:可以通过指针间接访问内存。指针也是变量,存放的是地址。
//定义指针
int * p;
//让指针记录变量a的地址
p = &a;
cout << "a的地址:" << p << endl;
cout << "a的地址:" << &a << endl;
//使用指针
//可以通过解引用的方式来找到指针指向的内存
//指针前加*代表解引用,找到指针指向的内存中的数据*p不等于a
*p = 100;
cout << "a=" << a << endl;
cout << "*p" << *p << endl;
2.空指针
/*
空指针:指针变量指向内存中编号为0的空间。
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的,因为0-255是系统占用的
*/
//1.一开始不知道指向哪里合适,给指针变量进行初始化
int * p = NULL;
//2.空指针是不可以直接访问的,会报错
*p = 100;
3.野指针
//野指针:指针变量指向非法的内存空间
//野指针
int * p = (int * )0x1100;
//访问野指针,会报错:引发了异常: 读取访问权限冲突。
cout << *p << endl;
4.const修饰
int a = 10;
int b = 10;
//1.const修饰指针 常量指针
//特点:指针的指向可以改,但指针指向的值不可以改
const int * p = &a;
//*p = 20; 错
p = &b;
//2.const修饰常量 指针常量
//特点:指针的指向不可以改,指针指向的值可以改
int * const p2 = &a;
*p2 = 20;
//p2 = &b; 错
//3.const修饰指针和常量
//特点:指针的指向和指向的值都不可以改
const int * const p3 = &a;
//*p3 = 20; 错
//p = &b; 错
5.利用指针访问数字中的元素
//定义数组
int arr[] = { 1,2,4 };
//arr就是数组的首地址
int * p = arr;
cout << "数组中第一个元素:" << *p << endl;
//将指针后移一位
p++;
cout << "数组中第二个元素:" << *p << endl;
//使用指针遍历数组
int * p2 = arr;
for (int i = 0; i < 3; i++)
{
cout << *p2 << endl;
p2++;
}
6.地址传递
//参数传递方式:地址传递
void swap2(int *p1,int *p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int a = 10;
int b = 20;
//调用函数传递地址
swap2(&a, &b);
cout << "a的值是:" << a << endl;
cout << "b的值是:" << b << endl;