C++ 快速導覽 - 指標與參考的比較

指標 (pointer) 儲存變數 (variable) 的記憶體位址,參考 (reference) 則是變數的別名 (alias) 。簡單說,可以操作指標,使指標改為指向不同的記憶體位址,但原變數不會受到影響,除非用反參考運算子 (dereference operator) 設定原變數,例如

#include <iostream>
 
int main(void)
{
    int a = 22;
    std::cout << "a: " << a << std::endl;

    int *aPtr = &a;
    *aPtr = 55;
    std::cout << "a: " << a << std::endl;

    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:pointerdemo3.cpp
    功能:示範 C++ 程式
    作者:張凱慶
    時間:西元 2013 年 1 月 */


此例利用反參考運算子將 a 重新設定為 55
*aPtr = 55;


編譯執行結果如下



參考不需要用到反參考運算子,只要改變參考指向的變數,原變數也會跟著改變,例如
#include <iostream>
 
int main(void)
{
    int a = 22;
    int b = 33;
    
    int *aPtr = &a;
    int *bPtr = &b;
    aPtr = bPtr;
    std::cout << "*aPtr: " << *aPtr << std::endl;
    std::cout << "*bPtr: " << *bPtr << std::endl;
    std::cout << "a: " << a << std::endl;
    std::cout << "b: " << b << std::endl;
    std::cout << std::endl;
    
    int &aRef = a;
    int &bRef = b;
    aRef = bRef;
    std::cout << "aRef: " << aRef << std::endl;
    std::cout << "bRef: " << bRef << std::endl;
    std::cout << "a: " << a << std::endl;
    std::cout << "b: " << b << std::endl;
    std::cout << std::endl;

    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:pointerdemo4.cpp
    功能:示範 C++ 程式
    作者:張凱慶
    時間:西元 2013 年 1 月 */



編譯執行結果如下



此例可見出當 bPtr 指派給 aPtr 後, ab 的值都沒有改變,可是當 bRef 指派給 aRef ,此時 a 就等於 b 的值了。


中英文術語對照
指標pointer
變數variable
參考reference
別名alias
反參考運算子dereference operator


您可以繼續參考
複合資料型態


相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁


參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial

C++ Primer, Fourth Edition, Stanley B. Lippman...

沒有留言: