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
沒有留言:
張貼留言