指针


下面我来帮你解释老师这段话真正的意思,并指出老师说的“不行的那件事”到底是什么。


✅ 先给你一个简单总结(最重要)

老师想表达的是:

两个指针可以互相赋值,让它们指向同一个变量,但是你不能让两个指针自己的“地址”相等,因为指针变量本身有各自独立的地址,永远不可能相等。

也就是说:

允许:两个指针 指向同一个地址(指向同一个变量)

不允许/不可能:让两个指针 自己所在的地址相同(指针变量本身的位置)


✅ 关键区别:指针指向的“内容” vs 指针本身的“地址”

在 C 语言中,一个指针有两个概念:

① 指针的值(指向哪里)

比如:

int a = 10, b = 20;
int *p = &a;
int *q = &b;

p 的指向:&a
q 的指向:&b

👉 你可以写:

p = q; // 让 p 指向 q 指向的地方

这个是 允许的。


② 指针变量本身的地址

比如:

&p; // 指针变量 p 自己在内存里的位置
&q; // 指针变量 q 自己在内存里的位置

每个变量都有它自己的独立存储位置。

👉 老师说的“不能”的就是这个:

你不能让 &p = &q;,因为两个变量在内存中的地址是固定的,并且不同,是无法修改的。

这就是老师的意思。


🔥 重点解释:老师说的“不行”是什么?

老师说的“不行”指的是:

❌ 不能让两个指针变量本身的地址相等
(不可能做到,也不能赋值修改)

因为:

一个变量的地址是编译器分配的

你没办法改变变量本身的地址

即使你写 p = q;,那只是让两个指针指向同一个变量,而不是让它们本身在同一块内存


🔍 举例对比(特别清晰)

✔ 可以做(合法的)

int a = 10, b = 20;
int *p = &a;
int *q = &b;

p = q; // 可以,让 p 也指向 b

❌ 不可能做(老师说的“不行”)

&p = &q; // 错误,永远不可能

因为 p 和 q 是两个不同的变量,它们有不同的存储位置。


📌 你问的第二个问题:这段话整体什么意思?

老师这段话的意思是:

  1. 指针之间可以互相赋值,让它们指向同一个变量,这没问题
  2. 可以比较指针指向的变量是否相同
  3. 可以用 p = q 修改它们指向的变量内容
  4. 唯独不能改变两个指针本身的地址

因为指针变量本身也有自己的固定地址

两个指针的地址永远不可能相同,也不允许你去让它们相等


🧠 一句话浓缩老师的意思

指针可以互相赋值,但不能改变指针变量本身的地址;两个指针可以指向同一个变量,但它们自己作为变量的地址永远不同。

如果你愿意,我可以再用图示画给你看,会更清晰。

声明:Siver Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 指针


式微式微,胡不归