2015年1月26日 星期一

C++ Pointer 指標介紹 (1)

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。

=======================================================





沒有留言:

張貼留言