網頁

2022/7/26

C++ 指針pointer簡介

C++ Pointer(指針/指標)為指向變數的記憶體位址,而記憶體位址空間中儲存著變數的值。


宣告pointer變數

宣告pointer的語法為type * identifiertype為pointer所指變數的型態;identifier為pointer變數的名稱。例如下面宣告一個指向int變數的pointer pp的值為一塊系統配置的記憶體位址0x7ffeea9ef860


main.cpp

#include <iostream>
using namespace std;

int main() {
    int *p;
    cout << p << endl; // 0x7ffeea9ef860

    return 0;
}

p為指向記憶體位址0x7ffeea9ef860的pointer。

     ┌───┐
     │ 0 │
     └───┘
0x7ffeea9ef860
       ▲
       │
       p


取得變數的pointer

而取得變數的pointer的方式為在變數名稱前加上取址運算子(Address-of operator)&。例如下面取得變數v的pointer分派到pointer變數p

main.cpp

#include <iostream>
using namespace std;

int main() {
    int v = 1;
    int *p;
    p = &v; // 取得變數v的pointer放到pointer變數p

    cout << p << endl; // 0x7ffee06ac83c

    return 0;
}

p為指向變數v記憶體位置0x7ffee06ac83c的pointer。

       v
     ┌───┐
     │ 1 │
     └───┘
0x7ffee06ac83c
       ▲
       │
       p

取得pointer的值

在pointer變數前加上取消參考運算子(Dereference operator)*可取得pointer指向位址儲存的值。要注意這邊的星號*和宣告pointer的星號作用不同。例如下面以&p取得所指變數記憶體位址的值,即變數v的值,而修改&p所指位址的值相當於修改v的值。

main.cpp

#include <iostream>
using namespace std;

int main() {
    int v = 1;
    int *p;
    p = &v;
    cout << p << endl;  // 0x7ffee06ac83c
    cout << *p << endl; // 1

    *p = 2;
    cout << v << endl; // 2

    return 0;
}

修改p所指記憶體位址儲存的值即為修改變數v的值。

       v
     ┌───┐
     │ 2 │
     └───┘
0x7ffee06ac83c
       ▲
       │
       p



沒有留言:

張貼留言