指针基本概念
指针和指针变量
指针就是内存的地址编号
指针变量,本质是变量,只是该变量保存的是内存的地址编号(不是普通的数值)
指针变量的定义
用 * 来修饰指针变量。例如:
1、定义一个指针变量p 保存 int num的地址 int *p;
2、定义一个指针变量p 保存数组int arr[5]首地址 int (*p)[5];
3、定义一个指针变量p 保存函数的入口地址 int fun(int,int) int (*p)(int,int);
4、定义一个指针变量p 保存结构体变量的地址 struct stu lucy struct stu *p;
5、定义一个指针变量p 保存指针变量int *p的地址 int **p
在32位平台,任何类型的指针变量都是4字节
在64位平台,任何类型的指针变量都是8字节
指针变量和普通变量建立关系,如下图所示
指针变量的初始化
1、指针变量如果不初始化,立即操作会出现段错误
2、指针变量如果没有指向合法的空间,建议初始化为NULL(不要操作指向NULL的指针变量)
3、将指针变量初始化为合法地址(变量的地址、动态申请的地址、函数入口地址)。例如:
int data = 10, *p = &data;
注意:
指针变量在操作之前,必须指向合法的地址空间
int *p = NULL; //NULL是赋值给p 完整的表达式:int *p; p = NULL;
指针变量的类型
将指针变量名遮盖,剩下的类型就是指针变量自身的类型。例如:
int *p; p自身的类型就是 int *
指针变量自身的类型,一般用于赋值语句判断
将指针变量名和离它最近的一个 * 一起遮盖,剩下的类型就是指针变量指向的类型。例如:
int *p; p指向的类型为Int
指针变量的注意事项
1、void 不能定义普通变量
例如:void num; //error void不能给num开辟空间
2、void * 可以定义指针变量
例如 void *p; 因为p是void * 类型(p是万能的一级指针变量,能保存任意以及指针地址编号)
万能指针一般用于函数的形参,以达到算法操作多种数据类型的目的(不能对万能指针变量取 * ,因为p的指向类型为void,无法确定p的取值宽度)
3、指针变量未初始化,不要取*
例如:int *p; *p; //提示段错误
4、指针变量初始化为NULL,不要取*
例如:int *p = NULL; *p; //提示段错误
5、指针变量不要越界访问
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)