初步介紹完函式之後,我想在介紹更進階的函式概念之前,先來介紹一下指標(Pointer)。從這裡開始會慢慢地有些難以理解,不過沒關係,我會盡可能地
讓你了解其中的原理。
什麼是指標呢? 指標是一種用以指向變數記憶體位址的資料型態,過去我們介紹的變數都是變數本身(變數的值),而非它在電腦或系統中的記憶體位址,因此
在程式語言中為了要取得變數的記憶體位址,就有了指標這樣的資料型態。
指標有非常多種用途,因此了解指標的原理,對後續的篇章不僅能有更好的理解,更可以運用自如。
我們先來看看如何宣告一個指標,並且將它指向一個變數:
int main () {
int *p;
int a = 1;
p = &a;
cout << " address of variable a = " << p << ", value of variable a = " << *p << endl;
}
首先我們宣告了一個指標p,在宣告指標時,其語法有兩種,一種是在宣告的資料型態後面接一個 "*",另一種是在變數名稱前接一個 "*"。
接著我們又宣告了一個變數a,其值等於1,然後用指標p去指向了變數a,這時候你會看到在變數a前多了一個 "&",這個意思就是取變數的位址,即為 "取址符號"。
最後輸出打印的部分,如果直接像輸出變數值那樣來輸出p值的話,它會顯示的是記憶體的位址,以十六進制的方式輸出一個數字,因此若要真正打印出指標p指向的變數值,就需要一個 "*" 來打印。
這時候的 "*" 就變成了 "取值符號"。
這些符號在邏輯運算子和
算術運算子也都有出現過,因此在理解上可能容易混淆,要特別注意區分的方式在於使用的時機點和符號的位置。
現在我們知道指標是指向變數記憶體位址,那麼它可以有什麼用途? 既然是牽涉到記憶體,那麼活用它就有以下幾個益處:
後續的篇章會先介紹第一和第三個特點,因為到目前為止只要懂指標的原理,再搭配前面篇章介紹的內容,就可以發揮這些特點, 而變數的記憶體配置則需要額外獨立出來介紹。
Last updated: