作者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
推 bcddivad:謝謝湯米老師!! 11/11 01:23
推 tw00088437:謝謝湯米老師!! 11/11 01:39
推 storym94374:謝謝湯米老師!! 去玩瑪莉歐賽車嘛~ 11/11 05:21
推 xup65p4: 謝謝湯米老師!! 大推認真有用文 11/11 07:03
→ phisixersai:第2課呢(敲碗) 11/11 10:02