[教學] Pointer I
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
推
11/11 01:23, , 1F
11/11 01:23, 1F
推
11/11 01:39, , 2F
11/11 01:39, 2F
推
11/11 05:21, , 3F
11/11 05:21, 3F
推
11/11 07:03, , 4F
11/11 07:03, 4F
→
11/11 10:02, , 5F
11/11 10:02, 5F
推
11/11 13:24, , 6F
11/11 13:24, 6F
推
11/11 14:18, , 7F
11/11 14:18, 7F
→
11/11 14:31, , 8F
11/11 14:31, 8F
推
11/11 19:06, , 9F
11/11 19:06, 9F
推
11/11 19:41, , 10F
11/11 19:41, 10F
→
11/11 21:06, , 11F
11/11 21:06, 11F
推
11/11 21:50, , 12F
11/11 21:50, 12F
推
11/13 12:13, , 13F
11/13 12:13, 13F
→
11/17 12:16, , 14F
11/17 12:16, 14F
推
11/18 07:10, , 15F
11/18 07:10, 15F