2008年11月13日 星期四

C/C++ 指標(Pointer)

指標變數的變數內容並不是字元或是數值等基本資料型態(int、char、double、float)的值,而是其他變數的記憶體位址(Address)。

指標變數的內容是指向另一個變數的位址。

指標變數宣告的語法:

變數型態 *指標變數名稱

ex:int *ptr
指標變數和指向的變數必須是相同的變數型態:

int *ptr;
char *ptr;
float *ptr;
double *ptr;
取得變數位址是使用&運算元,稱為取址,取出位址:
例如一個變數為
int num =5;
num變數的記憶體位址則為&num
而指標變數int *ptr的變數內容要等於num的位址,方法如下:
ptr = #
或是
int *ptr = #也可以
此時ptr的變數內容即為num的記憶體位址

由於宣告指標變數時,並不會給予指標變數預設值,可能指向某個記憶體位址,所以為了避免使用到錯誤的記憶體位址,因此在宣告指標變數時,給予預設值,因此我們可以讓指標變數指向NULL常數,如下:
int *ptr = NULL;
char *ptr = NULL;
....等

指向NULL代表此指標變數不指向任何記憶體為址,如此一來在寫程式時,可以用來判斷,是否指向正確的記憶體位置,如下:

if ( ptr == NULL )
printf("This is NULL\n");
else
printf("ptr's value = %p\n", ptr);

取得指標變數所指的變數值,請使用*運算元,稱為取值,取出所指向變數的數值或內容:
*ptr --> num
printf("num's value = %d\n", *ptr);

指標變數也可以在宣告時指定初值,不過取得位址的變數一定需要在指標變數前宣告,例如:

int j;

int *prt = &j;