7.指针
1.基础
指针的作用:可以通过指针间接访问内存
方法:通过指针来保存一个地址
指针的大小:对于64位Linux系统来说,指针通常占用8个字节
定义指针:
int a = 10;
int *p = &a;
// 输出是一样的
// 注意,int *p表示指针指向int类型,但是它所占的字节依旧是8个字节数
cout << a << endl;
0x7ffe4190ab2c
cout << p << endl;
0x7ffe4190ab2c
cout << sizeof(p) << endl;
8
使用指针:
// 称作解引用
cout << *p <<endl;
2.空指针
**空指针:**指针变量指向内存编号为0的空间
用途:初始化指针变量。就像是一把刀,不用的时候把它放在刀架上,而不是扔到垃圾桶去。
注意:空指针指向的内存是不可以访问的。内存编号为0~255为系统占用内存。不允许用户访问
int *p = nullptr
3.野指针
野指针:指着变量指向非法的内存空间,是一种常见的错误,要避免!
int *p = (int*)0x10001;
cout << *p << endl; // 会报错!!!
4. const修饰指针
- 常量指针
指针的指向可以修改,但是指针指向的值不可以修改
int a = 10;
const int *p = &a;
命名的理解方式:常量指针–const ptr,对应const
在*
前面,所以是常量指针。
具体的含义可以这样理解:const
在int
前面,则值是不可以修改的
- 指针常量
指针的指向不可以修改,指针指向的值可以修改
int a = 10;
int* const p = &a;
命名的理解方式:指针常量–ptr const,对应*
在const
前面面,所以是指针常量。
具体的含义可以这样理解:const
在p
前面,所以指针是不可以修改的
- 修饰常量
指针的指向和指向的值都不可以修改
const int *const p = &a;
5.指针与函数
用于函数参数中,用于地址传递,改变实参:
void swap(int *p1, int *p2){
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int a = 10;
int b = 20;
swap(&a, &b);