指针
指针的基本概念
1、指针的作用:可以通过指针间接访问内存 (指针就是内存地址
)
- 内存编号是从0开始记录的,一般 用16进制数字表示
- 可以利用指针变量保存地址
指针变量定义的语法
#include <iostream>
using namespace std;
int main() {
// 1、定义指针
int a = 10;
// 指针定义的语法:数据类型 * 指针变量名;
int* p;
// 让指针记录变量a的地址
p = &a;
cout << "a的地址为:" << &a << endl;
cout << "指针p为:" << p << endl;
// 2、使用指针
// 可以通过 解引用 的方式来找到指针指向的内存
// 指针前加 * 代表解引用,找到指针指向的内存中的数据
*p = 1000;
cout << "a = " << a << endl;
cout << "*p = " << *p << endl;
return 0;
}
output:
a的地址为:00EFFA1C
指针p为:00EFFA1C
a = 1000
*p = 1000
请按任意键继续. . .
指针所占的内存空间
指针也是种数据类型
指针在32位操作系统下:占4个字节空间
指针在64位操作系统下:占8个字节空间
这里都是用32位操作系统演示
int b = 20;
int* p2 = &b;
cout << sizeof(p2) << endl; // cout << sizeof(int *) << endl; // 这里效果等价
cout << sizeof(int*) << endl;
output
4
4
空指针和野指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的
#include <iostream>
using namespace std;
int main() {
//空指针
// 1、空指针用于给指针变量进行初始化
int* p = NULL;
// 2、空指针是不可以进行访问
// 0~255之间的内存编号是系统占用的,因此不可以访问
*p = 100;
return 0;
}
野指针:指针变量指向非法的内存空间
#include <iostream>
using namespace std;
int main() {
// 野指针
// 在程序中,尽量避免出现野指针
int* p = (int *)0x1100;
cout << *p << endl;
return 0;
}
总结:空指针和野指针都不是我们申请的空间,因此不要访问
const修饰指针
小技巧 * 读指针 ,const 读 常量
#include <iostream>
using namespace std;
int main15() {
// 1、const修饰指针 常量指针
int a = 10;
int b = 20;
const int* p = &a;
// 指针指向的值不可以改,指针的指向可以改
// *p = 20; 错误
p = &a; // 正确
// 2、const修饰常量 指针常量
// 指针的指向不可以改,指针指向的值可以改
int* const p2 = &a;
*p2 = 100; // 正确
// p2 = &b; // 错误的
// 3、const修饰常量和指针
// 指针的指向,和指针指向的值 都不可以改
const int* const p3 = &a;
// *p3 = 100; // 错误
// p3 = &b; // 错误
return 0;
}
1、
常量指针
2、
指针常量
3、
const即修饰指针,又修饰常量