Last Updated on 2021-05-03 by Clay
指標(Pointer)是 C++ 中一種儲存變數記憶體位址的資料型態,經常用於構建 Linked List 之類的結構或是用來傳遞大資料的記憶體位址從而提升程式效率。是使用『星號』(*)來宣告。
參考(Reference)則像是建立物件的另一個別名一般,我們對參考的操作會像是直接操作原本的物件一樣。
以下直接紀錄幾個簡單的小程式,示範如何使用指標以及參考。
指標(Pointer)
指標的意義說穿了,其實就只是儲存記憶體位址罷了。並沒有許多人想像得那麼複雜。
#include <iostream> #include <string> using namespace std; int main() { int n = 10; cout << "n: " << n << endl; cout << "n adress: " << &n << endl << endl; // Pointer int *p = &n; cout << "*p: " << *p << endl; cout << "p: " << p << endl << endl; // Add *p += 10; cout << "n: " << n << endl; cout << "n address: " << &n << endl; cout << "p: " << p << endl; return 0; }
Output:
n: 10
n adress: 0x7ffee7423a98
*p: 10
p: 0x7ffee7423a98
n: 20
n address: 0x7ffee7423a98
p: 0x7ffee7423a98
n 是一個 int 資料型態的變數,&n 則是該變數的記憶體位址。而我們可以使用 int *p
或是 int* p
來儲存此一記憶體位址。
而我們同樣可以透過操作 *p 來改變變數 n 的值。
只是透過這樣簡單的範例,其實我們很難明白為何要在程式中使用指標。要一直到自己去搭建 Linked List,並明白不使用連續記憶體位址的好處時,才能了解指標的威力。
參考(Reference)
參考就如何前言所述,就像一個變數的別名一樣。我們同樣也可以透過這個參考的變數影響到本來的變數值。
#include <iostream> #include <string> using namespace std; int main() { int n = 10; cout << "n: " << n << endl << endl; // Reference int &r = n; cout << "r: " << r << endl << endl; // Add r += 10; cout << "n: " << n << endl; cout << "r: " << r << endl; return 0; }
Output:
n: 10
r: 10
n: 20
r: 20
References
- https://www3.ntu.edu.sg/home/ehchua/programming/cpp/cp4_PointerReference.html
- http://www.cplusplus.com/doc/tutorial/pointers/
- http://www.dev-hq.net/c++/12--pointers-and-references