2013年5月9日 星期四

(C++) 淺談指標


C語言用 " * " 來宣告一個指標型態的變數,例如,想要宣告一個指向int的指標可以這樣做 :      int* intPtr;   intPtr是用來指向一個int變數的指標,intPtr儲存的是int變數的位址,而這個位址所對應到的地址所存的變數值,可以用*intPtr來表示。   例子:

#include < iostream >
void main( )
{
   int var = 10;
   int* intPtr = &var ;
   std::cout << "變數var的位址:" << intPtr << std::endl;
   std::cout << "指標intPtr所指向的變數的值:" << *intPtr << std::endl;
}

剛開始我們會被指標搞得頭暈腦脹,主要是因為指標在宣告時期和使用時期非常類似,但又不完全相同,在宣告時期,筆者習慣寫成(注意星號的位置)

   int* intPtr;

而不是

   int *intPtr;

宣告成int* intPtr; 筆者認為更貼近於指標所隱含的意思 -> intPtr是一種指向int型態變數的指標。

既然intPtr是一種指標,不同於一般的變數如 int intVal; 其中intVal是一個型態為int的變數,變數所存的內容是變數值,而指標所存的值則是"位址",例如:

   intPtr = &intVal;

則intPtr這個指標所存的值是intVal變數的地址,有了地址,要如何找到intVal所存的變數呢?答案就是要靠 " * "來取值,也就是 *intPtr。

簡單來說,除了宣告時期,當你在程式內容中看到沒跟" * "搭配出現的指標變數,他是想表達"位址",而與" * "搭配一起出現的指標變數,他想表達的是他所存的地址所指向的變數值(可能是另一指標所存的地址,這就是雙重指標的意義)。




沒有留言:

張貼留言