#include <iostream> int main(void) { int a = 22; int *aPtr = &a; std::cout << "aPtr: " << aPtr << std::endl; std::cout << "*aPtr: " << *aPtr << std::endl; return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:pointerdemo.cpp 功能:示範 C++ 程式 作者:張凱慶 時間:西元 2013 年 1 月 */
第 6 行,宣告指標的型態 (type) ,必須與指標所指向的變數 (variable) 型態相同,然後在指標變數前使用 * 運算子 (operator) 標明這是個指標變數,因此這個例子的參考變數為 aPtr ,等號右邊為所要指向的變數,此例為 a , a 之前的 & 則是取址運算子 (address-of operator)
int *aPtr = &a;
接下來先印出 aPtr 的值,然後利用反參考運算子 (dereference operator) * 取得 aPtr 所指向變數的值
std::cout << "aPtr: " << aPtr << std::endl; std::cout << "*aPtr: " << *aPtr << std::endl;
此例編譯執行結果如下
注意,編譯器 (compiler) 會依據運算子出現的位置判斷運算子的用途,例如
int *aPtr; // 宣告 aPtr 為指標變數 int &aRef; // 宣告 aRef 為參考變數 aPter = &a; // & 為取址運算子,取得 a 的記憶體位址 *aPter = 36; // * 為反參考運算子,將 a 設定為 36
陣列識別字其實就是個指標,另外指標也可以作算術運算,例如
#include <iostream> int main(void) { int a[] = {1, 2, 3, 4, 5}; std::cout << "a[2]: " << *(a + 2) << std::endl; std::cout << "a[4]: " << *(a + 4) << std::endl; return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:pointerdemo2.cpp 功能:示範 C++ 程式 作者:張凱慶 時間:西元 2013 年 1 月 */
這裡用陣列名稱與反參考運算子取得元素,指標的算術運算如同陣列的索引值,由於陣列名稱為第 1 個元素索引值為 0 的記憶體位址,所以加 2 就是索引值為 2 的元素記憶體位址,也就是第 3 個元素,加 4 就是索引值為 4 的元素記憶體位址,也就是第 5 個元素
std::cout << "a[2]: " << *(a + 2) << std::endl; std::cout << "a[4]: " << *(a + 4) << std::endl;
編譯執行結果如下
中英文術語對照 | |
---|---|
指標 | pointer |
資料型態 | data type |
型態 | type |
變數 | variable |
運算子 | operator |
取址運算子 | address-of operator |
反參考運算子 | dereference operator |
編譯器 | compiler |
您可以繼續參考
複合資料型態
相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁
參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial
C++ Primer, Fourth Edition, Stanley B. Lippman...
沒有留言:
張貼留言