C语言指针核心解析:内存地址、变量关联与指针运算

📅 发布时间:2026/10/13 6:19:20
C语言指针核心解析:内存地址、变量关联与指针运算
一、内存、变量与指针的底层关联核心概念拆解内存计算机中连续的字节存储区域每个字节对应唯一十六进制地址如 0x7ffeefbff5a4 是数据存储的物理基础。变量给特定内存空间起的“别名”。定义变量时如 int a 10 编译器会根据类型分配内存 int 占4字节、 char 占1字节、 float 占4字节变量名与内存起始地址绑定——通过变量名操作数据本质是通过地址访问内存。指针专门存储“变量内存地址”的变量。普通变量存数据值指针变量存地址通过地址可间接操作目标变量类似用门牌号找房间。指针基础使用代码关键说明关键规则指针类型必须与指向变量类型一致 int* 指向 int char* 指向 char 否则会导致内存访问异常如 char* 指向 int 会读取不完整数据。避免使用野指针未初始化、未赋值的指针访问野指针会导致程序崩溃。空指针 NULL 指向地址 0 的指针不可解引用常用于指针初始化如 int* p NULL 。二、指针运算本质是“地址偏移”核心重点指针运算不是普通数值运算而是按“指向类型的大小”进行地址偏移核心用于操作连续内存如数组、字符串。运算核心规则偏移单位指针每加减1地址偏移“指向变量类型的字节数”而非1字节。公式 运算后地址 原地址 偏移量 × 变量类型大小示例int* p int 占4字节 → p1 偏移4字节 p-2 偏移 2×48 字节char* q char 占1字节 → q3 偏移3字节float* r float 占4字节 → r5 偏移 5×420 字节。常见指针运算场景代码解析1指针与整数加减最常用操作数组数组在内存中连续存储数组名本质是首元素地址 arr arr[0] 通过指针偏移可访问所有元素。2指针自增与自减–分为前置 p 和后置 p 核心是“先偏移再使用”或“先使用再偏移”仅影响指针指向不改变目标变量值。3同类型指针相减仅支持指向同一连续内存的指针相减结果是“两个指针之间的元素个数”而非地址数值差用于计算元素间距。3. 指针运算禁忌必记不支持指针加法、乘法、除法如 p1 p2 、 p * 2 非法不可对空指针 NULL 、野指针做运算会导致内存越界崩溃指针偏移不可超出有效内存范围如数组最后一个元素后继续 p 不同类型指针不可相减如 int* 与 char* 相减结果无意义。