作者TommyKSHS (湯米)
看板NTUEE113HW
標題[教學] Pointer I
時間Wed Nov 11 01:20:21 2009
Pointer ( 指標 )
指標也是一種變數,只不過指標所儲存的並不是像一般的變數所儲存的東西。
它所儲存的是
「位址」 ( Address )。先扯開一下,什麼是 address 呢?
所有的變數 ( 包含 pointer, reference ) 在記憶體中一定會有它們「住」的地方。
先來看看怎麼宣告 pointer
datatype *ptr;
//其中 datatype 為任一種變數型態 ( ex: int, float, char, int*, ... )
例如:
int *iptr;
int* iptr;
//請注意,這兩種寫法是等價的。
然後 datatype* 只能儲存 datatype 型態的變數的 address。
簡單來說,女宿的房號所代表的房間住的一定是女生;
而男宿…不在討論範圍之內= =
那怎麼指定 address 給 pointer 呢?
宣告時:
int a =
19;
int *iptr =
&a;
非宣告時:
iptr =
&a;
來說一下, & 是一個 operator ( 運算子,算符 )
他的功能是「取址」 ,也就是取得一個變數的位址
簡單來說,就是有人對你執行了 問你:「 你家住哪?」 這個動作。
於是 &a 代表的就是 a 的 address
這樣上面的指定動作應該比較好懂吧 XD
然後, pointer 的操作有另一個 operator,就是 *
* 的意義是「取值」,也就是有人去照著 pointer 上的地址去敲門問:
「裡面住誰?」 這樣的動作。
來個例子:
int a =
10;
int *iptr =
&a;
cout << a; // 這是 a 的數值,也就是 10
cout << &a; // 這是 a 的位置,毎次開機會不一樣= =
cout << iptr; // 這是 iptr 所儲存的東西,也就是 a 的位置
cout << *iptr;// 這是對 iptr 取值,也就是問 iptr 所代表的那個位置
// 存的數值是什麼。
舉個廖婉君上課問過的問題
&*iptr 和 *&iptr 一樣還是不一樣?
答案是:一樣。
理由:從上面的解釋,不難發現 * 和 & 互為反函數吧 XD
然後我懶得打了= = 我要去玩跑跑卡丁車了~
--
╭═══╤═══╮ ╰═╮ ╭═╯
│ │ │╭═和平,土地,麵包═╮ │ │
│ ╭═╧╧╮╤═╤═╮═╤═╤╧╮ │ │
│ │ ││ │ │ │ │ │ ╰═╤═╯
│ │ ││ │ │ │ │ │ │
╰╧╯╰═══╯╰ ╰ ╰ ╰ ╰ ╰ ─╯
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.239.191
1F:推 bcddivad:謝謝湯米老師!! 11/11 01:23
2F:推 tw00088437:謝謝湯米老師!! 11/11 01:39
3F:推 storym94374:謝謝湯米老師!! 去玩瑪莉歐賽車嘛~ 11/11 05:21
4F:推 xup65p4: 謝謝湯米老師!! 大推認真有用文 11/11 07:03
5F:→ phisixersai:第2課呢(敲碗) 11/11 10:02
6F:推 schimtag168: 謝謝湯米老師!! 樓上斷推了XD 11/11 13:24
7F:推 lttlstrngth: 謝謝湯米老師!! 樓上不欺負長id 11/11 14:18
8F:→ b98901056: 謝謝湯米老師!! 不欺負長id是好人XD 11/11 14:31
9F:推 tomap41017:謝謝湯米老師!! 11/11 19:06
10F:推 toshiba011:我也有在玩~ 11/11 19:41
11F:→ TommyKSHS:嘿嘿 樓上有機會來交流一下吧~ 11/11 21:06
12F:推 tw00088437: 樓上來陪我和三樓玩瑪莉歐賽車 11/11 21:50
13F:推 toshiba011:我剩板車喔XD 11/13 12:13
14F:→ sciencepie:清晰易懂 11/17 12:16
15F:推 breeze4103: 湯米~~~你人好好喔!! 11/18 07:10