C++ Pointer(指針/指標)為指向變數的記憶體位址,而記憶體位址空間中儲存著變數的值。
宣告pointer變數
宣告pointer的語法為type * identifier,type為pointer所指變數的型態;identifier為pointer變數的名稱。例如下面宣告一個指向int變數的pointer p,p的值為一塊系統配置的記憶體位址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
沒有留言:
張貼留言