我想与大家分享,我用来学习如何指针工作的时候,我开始了一个通用的技术。如果你将它应用到你的问题上,你会看到答案与白天一样平常。
获取方格纸的大板和纵向躺在它在你面前的桌子上。这是你电脑的记忆。每个方框代表一个字节。选择一行,并将数字'100'放在最左边的方框下方。这是内存的“最低地址”。 (我选择了100作为不是0的任意数字,您可以选择另一个数字。)按从左到右的升序对盒子进行编号。
+---+---+---+---+---+--
| | | | | | ...
+---+---+---+---+---+--
100 101 102 103 104 ...
现在,就目前而言,假设一个int是一个字节的大小。你是一个八位电脑。将您的int a
写入其中一个框中。箱子下面的数字是它的地址。现在选择另一个框包含int *b = &a
。 int *b
也是某处存储在内存中的变量,它是一个包含&a
,它的发音是“一个地址”的指针。
int a = 5;
int *b = &a;
a b
+---+---+---+---+---+--
| 5 | |100| | | ...
+---+---+---+---+---+--
100 101 102 103 104 ...
我们通过视觉,你看到的价值观和指针的任何其他组合工作,你可以使用这个模型。这是一个简化(因为语言的书呆子会说,一个指针不一定的地址,内存是不是一定顺序,并有堆和栈和寄存器等),但它是一个相当不错的类比99%的电脑和微控制器。
你的情况
所以,
int x = 35;
int y = 46;
x y
+---+---+---+---+---+--
| 35| 46| | | | ...
+---+---+---+---+---+--
100 101 102 103 104 ...
int *p = &x;
int *q = &y;
x y p q
+---+---+---+---+---+--
| 35| 46|100|101| | ...
+---+---+---+---+---+--
100 101 102 103 104 ...
p = q;
x y p q
+---+---+---+---+---+--
| 35| 46|101|101| | ...
+---+---+---+---+---+--
100 101 102 103 104 ...
*p = 90;
x y p q
+---+---+---+---+---+--
| 35| 90|101|101| | ...
+---+---+---+---+---+--
100 101 102 103 104 ...
现在是什么*p
?什么是*q
?
一个非常优雅的答案。当我得知C/C++,我的朋友给我一个提示,拨打* P为“p的内容”,并成为后说的很清楚。 – lud0h