Pointer 是一個可以儲存位址的變數,
宣告方法:在資料型態後面加上星號*,例如:
int *p;
int* p;
int*p;
以上宣告方法都是合法的。
現在,指標變數p可以存放int data type 資料的位址了。
C++提供了兩個一元運算子( unary operators) 可計算出變數的 位址 和 其所指的資料。
1. * : Pointer dereference : 傳回位址資料數值。
2. & : Address-of : 傳回起始位址。
=======================================================
Example 1:
int v = 5 ;
int *p = &v;
int v2 = *p;
假設v的位址是12000,
Result 便會是 : v = 5 , *p = 12000 , v2 = 5,
(註:int 佔用的空間隨電腦機型而定,以32位元電腦來說,佔用了4byte,
而 v 便佔用了記憶體位址的12000~12003 , 另外,任何data type的
指標變數所佔用的記憶體空間皆為4byte。)
=======================================================
Example 2:
Given
&v = 0x0065FDF4 ;
&p = 0x0065FDF0;
&v2 = 0x0065FDEC;
int v=5;
int *p = &v;
int v2 = *p;
Result:
&v = 0x0065FDF4
v = 5;
&p = 0x0065FDF0
p = 0x0065FDF4
*p = 5;
&v2 = 0x0065FDEC
v2 = 5
=======================================================
Example 3:
Given
&v = 0x0065FDF4 ;
&p = 0x0065FDF0;
&v2 = 0x0065FDEC;
int v=5;
int *p = &v;
int v2 = *p;
Result:
&p = 0x0065FDF0
p = 0x0065FDF4
p+1 = 0x0065FDF8 (int 佔4 byte so 0x0065FDF4 + 4)
*p = 5
*(p+1) = 未知數,但其的目標地址將會是 0x0065FDF8,若此地址包含
了一個數值如10,那 *(p+1)得出的值就不是未知數了,會是10。
=======================================================
沒有留言:
張貼留言