[C++] C++的指標概念

  • 344
  • 0
C++的指標概念

 

學習C++很容易碰到指標,
但是初學者往往會搞不清楚甚麼是指標,
在這裡簡單的解釋一下。
 

C++的變數


其實在寫程式的時候,
當我們宣告一個變數的時候,
同時會有以下幾個:address(記憶體位置), size(大小), value(值)。

記憶體位置(address)

以address來說,
64位元系統的address是這樣表示: 0x0000000000000001,0x開頭表示是16進位,也就是4bit ,總共有 16 x 4 = 64位元。

大小(size)

當記憶體被配置的時候,
同時會分配連續位置的大小,
以最常見的int為例,
在32位元系統是2bytes (範圍 -32768 至 32767 ),
(這是二十年前的系統,聽說後來有些32位元系統也改成4bytes了)
在64位元系統是4bytes (範圍 -2,147,483,648 至 2,147,483,647 ),
不過本篇文章不會談太多size的部分。

值(value)

接下來就是值的部份,
以最簡單的int來說,
當我們宣告了一個變數:

int i = 1;

編譯器會跟作業系統要一個記憶體位置給i(假設是0x0000000000000001),
而這個變數i的值為1(完整寫法是0x00000001)。

指標(pointer)

接下來就談到今天的主題:指標(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;
}

執行的結果為:

所以可以知道
指標(pos)就是指向某個變數(num)的變數,
然後會另外分配一個位址(&pos)給指標,
指標的值(pos)其實就是那個變數的位址(&num),
指標所指向的值(*pos)其實就是那個變數的值(num)。

另外可以看到int的size是4bytes,
然後指標的size是64位元(8bytes)。