C++ 快速導覽 - 指標

指標 (pointer) 是儲存記憶體位址的資料型態 (data type) ,例如

#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 ,等號右邊為所要指向的變數,此例為 aa 之前的 & 則是取址運算子 (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...

沒有留言: