指针
定义:指针用来存在变量的地址
语法:数据类型 指针名称*
int* p;
指针和变量建立联系
//声明一个变量
int a = 10;
//获取变量a的地址赋值给p
p = &a;
解引用 可以用来获取或设置指针指向的变量的值
//*p 解引用 通过解引用获取变量a的值
cout << *p << endl;
//通过解引用直接操作内存修改变量a的值
*p = 100;
cout << a << endl;
指针类型占用的内存空间
windows下32位操作系统占用4个字节,64位操作系统占用8个字节,不区分数据类型
cout << sizeof(p) << endl;
cout << sizeof(char*) << endl;
cout << sizeof(string*) << endl;
cout << sizeof(float*) << endl;
cout << sizeof(double*) << endl;
空指针:指针指向地址为0的空间 一般用作初始化一个指针变量,不能访问
int* p1 = NULL;//空指针 初始化p1
野指针:指针指向非法的内存空间,也不能被访问
int* p2 = (int*)0x1100;//随便给了个地址
const修饰指针(常量指针)
- 特点:常量指针的指向可以修改,但是常量指针指向的值不能修改
int a2 = 10;
int b2 = 10;
const int* p3 = &a2;
//*p3 = 20; 错误 :指针指向的值不能修改
p3 = &b2;//正确 :指针的指向可以修改
const修饰常量(指针常量)
- 特点:指针常量的指向不能修改,但是指针常量指向的值可以修改
int* const p4 = &a2;
*p4 = 1000;
cout << *p4 << endl;//正确 指针指向的值可以修改
// p4 = $b2; 错误,指针常量的指向不能修改
const既修饰指针又修饰常量
- 特点:指针的指向和指针指向的值都不能修改
const int* const p5 = &a2;//指针的指向和指针指向的值都不能修改