5.1重学C++之【指针定义使用、空指针野指针、const修饰指针】
#include<iostream>
using namespace std;
int main(){
/*
指针的定义和使用
*/
int a = 10;
//定义指针:数据类型 * 指针变量名
int * p;
//让指针记录变量a的地址
p = &a; // &取址符
cout << &a << endl;
cout << p << endl;
//使用指针,指针可以读写其指向的内存
//通过解引用的方式可以找到指针指向的内存
//指针前加 * 表示解引用,可找到指针指向的内存中的数据
*p = 1000;
cout << a << endl;
cout << *p << endl;
/*
指针所占的内存空间
不管何种数据类型的指针,在32位环境下占用4字节,在64位环境下占用8字节;本地默认环境一般为32位
*/
int b = 20;
int * pp = &b;
cout << sizeof(int *) << endl; //4 'int *'即为指针pp的数据类型
cout << sizeof(pp) << endl; //4
cout << sizeof(double *) << endl; //4
cout << sizeof(float *) << endl; //4
cout << sizeof(char *) << endl; //4
/*
空指针&野指针
空指针:指针变量指向内存中编号为0的空间,用作初始化指针变量,注意空指针指向的内存不可访问
野指针:指针变量指向非法的内存空间,程序中应避免野指针,会报错
*/
int * p1 = NULL;
//*p1 = 100; //程序崩溃报错,0~255内存编号是系统占用的,不可以人为访问
cout << p1 << endl;
int * p2 = (int *)0x1100; //随便指向一个内存,查看是否有权限读取
cout << p2 << endl;
//结论:空指针和野指针都不是我们人为申请的空间,因此不要访问!
/*
const修饰指针
三种情况:
const修饰指针--常量指针
const修饰常量--指针常量
const既修饰指针又修饰常量
*/
a = 10;
b = 20;
// 1 常量指针:指针指向的值不可以改,指针的指向可以改
const int * _p = &a;
//*p = 20; //报错
_p = &b; //可以
// 2 指针常量:指针指向不可以改,指针指向的值可以改
int * const _p2 = &a;
*_p2 = 100; //可以
//_p2 = &b; //报错
// 3 同时修饰:此时指针指向和指针指向的值都不可以改
const int * const _p3 = &a;
//*_p3 = 100; //报错
//_p3 = &b; //报错
// 区分技巧:看const右侧紧跟着的是指针还是常量,是指针就是常量指针,是常量就是指针常量
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!