c++ 中的指標

Cplusplus-tutorial-in-hindi.jpg
指標是我們學習cpp的難攻克堡壘。

重要的事情說三遍
- 指標就是持有記憶體地址的變數
int a = 5
我們知道不同型別佔據記憶體大小也不同,在這裡先不管這個,我們知道 a 就是記憶體地址, a = 5,就是把 5 儲存在記憶體地址為 a (可以理解為記憶體地址別名)的記憶體中。
| 記憶體地址 | 值 |
| :----------- | - :|
| 100 | |
| 101 | |
| 102 "a" | 5 |
| 103 | |
| 104 | |
| 105 | |
a = RAM[102]
這是就是 direct addrssing (直接通過地址獲取變數值)
然後我們定義一個變數為 b 型別為指標,用於儲存記憶體地址,記憶體地址可簡單理解為門牌號。
pointer b
| 記憶體地址 | 值 |
| :----------- | - :|
| 100 "c" | |
| 101 | |
| 102 "a" | 5 |
| 103 | |
| 104 | |
| 105 "b" | 102 |
我們可以給 b 賦上一個記憶體地址的值
pointer b = 100
在 cpp 中我們可以通過 & 獲取獲取指標的值(也就是記憶體地址的實際值)。
pointer b = &a
那麼就是相對於把 a 的持有的記憶體地址值(102)賦值給了 b 這個指標型別
b 有了 5 的記憶體地址,那麼我們理論上是可通過 b 找到 5 的,這種方式叫做間接定址(indirect addressing)
在定義一個變數 c ,這裡又有新的符號登場了 * ,*是操作符將指標型別變數儲存的記憶體地址所指向的記憶體中儲存的值取出來。 b 儲存 102 ,102 地址記憶體中儲存值為 5 。我想大家應該理解了吧
int c = *b
| 記憶體地址 | 值 |
| :----------- | - :|
| 100 "c" | 5 |
| 101 | |
| 102 "a" | 5 |
| 103 | |
| 104 | |
| 105 "b" | 102 |
這裡關鍵瞭解一下 & 和 * 這兩個操作符,然後理解指標就是持有記憶體地址變數。
但是在 cpp 中沒有指標型別變數 pointer 是我在這裡為講解虛構出來的,在 cpp 定義指標型別變數是這樣做的
int* b = &a
或者
int *b = &a
這麼設計有點過分,無形中給 develper 程式碼麻煩,這裡用 * 那裡也用* ,我們可以通過 = 將 * 區分為表示 pointer 型別和取值操作符。

Java-Vs-Kotlin-–-Which-Should-You-Choose-For-Android-Development.png