宣告 (declare) 指標變數使用星號運算子,舉例如下
#include <iostream> using namespace std; int main(void) { int n = 11; cout << n << endl; int *nPter = &n; cout << nPter << endl; int t = *nPter; cout << t << endl; return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:pointerdemo.cpp 功能:示範 C++ 程式 作者:張凱慶 時間:西元 2012 年 10 月 */
這個例子中,我們先宣告整數變數 n
int n = 11;
然後用 nPtr 取得 n 的記憶體位置。須留意 nPtr 的前面(右邊)加星號表示是指標,而這個星號運算子 * 用為宣告指標,指標的型態 (type) 必須與取得記憶體位置變數的型態相符,等號右邊則是利用取址運算子 (address-of operator) & 取得變數 n 的記憶體位置
int *nPter = &n;
下面則是利用反參考運算子 (dereference operator) ,同樣是星號 * ,但是出現在等號的右邊,由 t 取得 nPtr 所儲存記憶體位置變數的值,這裡 nPtr 儲存的是 n 的記憶體位置, n 的值為整數 11
int t = *nPter;
會不會有點霧沙沙的呢?來編譯執行看看囉
應該腦袋有點比較清楚了吧!這部份大概是 C++ 中最難搞懂的地方。我們再用另一個例子來說明,連帶介紹參考與 new 關鍵字 (keyword)
#include <iostream> #include <string> using namespace std; int main(void) { string a = "There is no spoon."; cout << a << endl; //b為對 a 的指標 string *b = &a; cout << b << endl; //c為對 a 的參考 string &c = a; cout << c << endl; //d為另一個指標 string *d = new string("There is no spoon."); cout << d << endl; return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:pointerdemo2.cpp 功能:示範 C++ 程式 作者:張凱慶 時間:西元 2012 年 10 月 */
宣告參考變數用到與取值運算子相同的 & ,但這出現在等號的左邊
string &c = a;
簡單來說,參考只是個別名,這個例子 c 與 a 都是相同的字串 (string) 物件 (object) 。
下面用 new 建立新的字串物件, new 建立的物件就必須放在指標之中
string *d = new string("There is no spoon.");
new 為建立物件的例外一種方式,編譯執行結果如下
可能對 C++ 新手一下子搞不清楚這邊上面下面都有 * ,那邊左左右右也都有 & ,卻又往往有不同的意義,大概都需要些陣痛期才能完全摸清楚唄!接下來,我們繼續介紹變數命名規則囉!
中英文術語對照 | |
---|---|
指標 | pointer |
變數 | variable |
參考 | reference |
別名 | alias |
宣告 | declare |
型態 | type |
取址運算子 | address-of operator |
反參考運算子 | dereference operator |
關鍵字 | keyword |
字串 | string |
物件 | object |
您可以繼續參考
基礎篇
相關目錄
回 C++ 入門指南
回 C++ 教材目錄
回首頁
參考資料
http://www.cplusplus.com/doc/tutorial/pointers/
2 則留言:
我新學的
一看就明了
雖然我學過visual basic
可以請問一下是什麼情況要用到指標嗎?
因為我看完後雖然知道指標是這樣,但完全不知道到底是什麼情況要用。
張貼留言