20.指针与常规变量的理解

  • 一、基础概念:变量和内存

先我们需要明白,计算机中的每个变量都存储在内存的某个位置。
就像酒店里每个房间都有房间号一样,内存中的每个位置也有自己的"房间号" - 这就是内存地址。

  • 普通变量
int age = 25;
  • 在内存中分配一个"房间" - int类型(通常是4字节大小)
  • 房间号(地址)- 01xx 由系统自动决定
  • 房间内 - 地址 存储的是值25
  • 我们可以直接用age来访问这个值
个人理解:
常规变量int age = 25; 中变量名age 是指向内存地址(0x1000),
内存地址指向25(注意这里指向不是指针的意思),
实际就是变量名就是内存地址(0x1000),
只不过是编译器给内存地址起的"别名"(方便人类记忆的名字)

变量 int age = 25; 的内存关系:
编译后,age 会被替换为具体的内存地址
age是编译器给某个内存地址起的名字,那个地址存储着值25

  • 内存中的实际情况:
[内存地址]  [存储内容]  [变量名]
0x1000     25         age

假设系统为 age 分配了地址 0x1000
当你写 age 时,编译器知道你要访问 0x1000 地址的值
当你写 &age 时,得到的就是 0x1000
  • 与指针的关键区别:
普通变量 age:直接关联到存储值的内存位置
指针变量 int *p = &age;:是一个专门存储地址的变量
表达方式 含义 示例值
age 直接获取存储的值 25
&age 获取变量所在的内存地址 0x1000
int *p = &age 指针p存储的是age的地址 p = 0x1000
*p 通过指针获取age的值 25


  • 对指针与常规变量的存储取值理解

假设有以下代码:

int age = 25;
int *p_age = &age;  //将age的地址赋值给p_age

内存布局可能是:

[变量]    [地址]    [存储内容]
age      0x1000    25
p_age    0x2000    0x1000 (age的地址)

当你在代码中写:

age → 直接从地址0x1000中读取值25
&age → 得到0x1000 ,&是取地址符
p_age → 读取0x2000的值0x1000
*p_age → 先读p_age的值0x1000,再去0x1000读值25 //* 是解引用

理解:指针(*p) -> 指向本身的内存地址(0x2000) -> 指向被赋值的给指针的内存地址(0x1000) -> 指向被赋值的给指针的内存地址中的值(25)

posted @ 2025-03-26 23:17  little小新  阅读(20)  评论(0)    收藏  举报