學習C++很容易碰到指標,
但是初學者往往會搞不清楚甚麼是指標,
在這裡簡單的解釋一下。
其實在寫程式的時候,
當我們宣告一個變數的時候,
同時會有以下幾個:address(記憶體位置), size(大小), value(值)。
以address來說,
64位元系統的address是這樣表示: 0x0000000000000001,0x開頭表示是16進位,也就是4bit ,總共有 16 x 4 = 64位元。
當記憶體被配置的時候,
同時會分配連續位置的大小,
以最常見的int為例,
在32位元系統是2bytes (範圍 -32768 至 32767 ),
(這是二十年前的系統,聽說後來有些32位元系統也改成4bytes了)
在64位元系統是4bytes (範圍 -2,147,483,648 至 2,147,483,647 ),
不過本篇文章不會談太多size的部分。
接下來就是值的部份,
以最簡單的int來說,
當我們宣告了一個變數:
int i = 1;
編譯器會跟作業系統要一個記憶體位置給i(假設是0x0000000000000001),
而這個變數i的值為1(完整寫法是0x00000001)。
接下來就談到今天的主題:指標(pointer),
我們先寫一個簡單的範例:
int main()
{
int num = 1;
int* pos = #
cout << "num的address: " << &num << endl;
cout << "num的size: " << sizeof(num) << endl;
cout << "num的value: " << num << endl;
cout << endl;
cout << "pos的address: " << &pos << endl;
cout << "pos的size: " << sizeof(pos) << endl;
cout << "pos的value: " << pos << endl;
cout << "pos指向的value: " << *pos << endl;
cout << endl;
system("pause");
return 0;
}
執行的結果為:
另外可以看到int的size是4bytes,
然後指標的size是64位元(8bytes)。