P、*P和&P三者的区别

本文详细解释了指针变量中常见的三种符号:p、*p 和 &p 的含义及用途。p 代表指针变量的内存地址;*p 表示通过该指针访问的数据;&p 是获取指针本身的地址。

转自:http://ambitiongold.blog.163.com/blog/static/1840165522012921103511610/

假设我们定义一个指针p。
那么会经常使用到三个符号:

 p
 *p
 &p
  • p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用%p来输出的话,它将是一个16进制数。

  • *p表示此指针指向的内存地址中存放的内容,一般是一个和指针类型一致的变量或者常量。

  • &是取地址运算符,&p就是取指针p的地址。

太好了,我们来一步一步地讲清楚: > **`*p`、`&p` `int *p`** 看起来很像,但它们的含义用途是不一样的。我们用大白话例子来解释。 --- ## 一、`int *p;` 是什么? 这是**定义一个指针变量 p**,它将来可以保存一个地址。 ```c int *p; ``` 这句代码的意思是: > “我要定义一个叫 `p` 的变量,它是用来存一个 `int` 类型变量地址的指针。” 你可以把它理解成: > “我准备了一个小盒子(`p`),这个盒子里将来要放一个整数的‘门牌号’。” --- ## 二、`&p` 是什么? 这是**取变量 p 的地址**。 我们先来看一个例子: ```c int a = 10; int *p = &a; ``` - `&a` 表示取变量 `a` 的地址,也就是它的“家的门牌号”。 - 把这个地址存到 `p` 里,就是“`p` 指向 `a`”。 那如果写: ```c printf("%p", &p); ``` - 就是在输出 `p` 自己的地址! 就像:小盒子(`p`)也有它自己的位置(在内存里),`&p` 就是它的位置。 --- ## 三、`*p` 是什么? 这是**“去 p 所指向的地方取值”**,也叫“解引用”。 继续看例子: ```c int a = 10; int *p = &a; printf("%d", *p); // 输出 10 ``` - `*p` 就是:拿着 `p` 里的地址去找它指向的变量,然后把那个变量的值取出来。 - 你可以理解成:用 `p` 找到 `a`,然后打开门,看看里面装的是什么。 --- ## 四、三者对比总结(大白话) | 写法 | 含义 | 举个例子 | 通俗解释 | |----------|------|----------|-----------| | `int *p;` | 定义一个指针变量 | `int *p;` | 我准备了一个盒子,将来装一个变量的地址 | | `&p` | 取指针变量自己的地址 | `printf("%p", &p);` | 指针 `p` 自己的“家在哪儿?” | | `*p` | 取指针指向的内容 | `printf("%d", *p);` | 去 `p` 指向的地方拿数据出来 | --- ## 🧠 总结一句话: > **`int *p` 是定义指针;`&p` 是问指针自己住在哪;`*p` 是问指针指着的东西是什么。** --- ## ✅ 知识点 1. **指针的定义** `int *p;` 是定义一个指向 `int` 类型的指针变量。 2. **取地址运算符 `&`** `&变量` 可以获取变量的内存地址。 3. **解引用运算符 `*`** `*指针` 表示访问指针所指向的内存中的值。 --- 如果你还想了解多级指针(比如 `int **p`)或者数组指针的更多联系,我也可以继续讲 😄
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值