我想與大家分享,我用來學習如何指針工作的時候,我開始了一個通用的技術。如果你將它應用到你的問題上,你會看到答案與白天一樣平常。
獲取方格紙的大板和縱向躺在它在你面前的桌子上。這是你電腦的記憶。每個方框代表一個字節。選擇一行,並將數字'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