為什麼要講記憶體配置設定呢,因為要了解指針的實質,就必須得從了解記憶體開始~
(1)、計算機中記憶體編址
記憶體是一個存放資料的空間,進行編址之後可以對資料空間進行合理的利用和管理。記憶體編址的基本機關是位元組。
(2)、變量的定義,背後的記憶體配置設定
int a;
當我們定義一個int類型的變量 a 時,系統就開始準備一定的記憶體空間,這個記憶體空間的大小是int類型資料所需的記憶體大小(這個大小和具體的編譯器有關,現在的編譯器基本都是4位元組),給這個記憶體空間一個名字吧,系統看見我們給了它一個名字a,那它就叫a好了~~~,此時,a 就代表這4個位元組的空間(假設int型資料就占據4個位元組的記憶體空間)。我們可以在這四個位元組的空間裡放入任意int型數字,放入30,那 a 就是30,放入40,那 a 就是40~
那麼 a 的含義就是:
1、這個變量的名字
2、變量裡存儲的内容
要是我們比較好奇,想要知道這個a到底在哪裡呀,系統把哪塊空間配置設定給它了?
& 這個符号就發揮了大用場, &a 就代表 a 這塊空間的位址,沿着這個位址往後的4個位元組就是 a 代表的記憶體空間~
c++中通過cout<<&a<<endl;可以輸出int型變量的位址
同樣的,我們可以定義一個字元型變量
char b;
當我們定義一個字元變量時,系統就開始準備一定的記憶體空間,這個記憶體空間是char型資料所占據的記憶體大小(這個大小是1個位元組),同樣,我們叫這個記憶體空間b~~~,可以将任意字元指派給b~~~
但是,直接cout<<&b<<endl;并不能像cout<<&a<<endl;一樣得到十六進制的位址,想要輸出char型變量的位址可以參考連結char型變量位址的輸出
接下來我們要進入主題——指針啦!
上一篇文章講了指針的定義,大家應該會定義一個指針了,我們以定義一個整型指針為例:
int *p;
當我們定義一個 int * 類型的變量時,系統就開始準備一定的記憶體空間,這個記憶體空間的大小是 int * 類型所需的記憶體大小,(所需的記憶體大小可由sizeof(int *)語句得到),給這個空間一個名字吧,系統看見我們給了它一個名字p,那它就叫 p 好了,是不是和定義一個整型變量或者是字元型變量一樣呢?是的,這個int * 的變量我們就叫它指針(或者指針變量)~~~
int類型的變量 a 裡存放的是int類型的數,我們可以用這個數字進行加減乘除運算
char類型變量 b 裡存放的是char類型的字元,我們可以用這個字元進行字元操作
那 int * 型變量裡存放的是什麼?
int * 類型變量 p 裡存放的是 int * 類型的位址,我們可以用這個位址找到記憶體中的一個存儲空間
那麼c++要這個類型的變量有什麼用呢?比如我們要去上課,下午一共三節課,有資料結構課,有算法課,還有c++課,三節課在不同的教室,如果我們不知道c++課在哪個教室,就得挨個去看喽,如果我們知道c++課在101教室,算法課在102教室,資料結構的課在103教室,直接去101教室就好啦,起中間媒介的連接配接作用的101,102,103編号或許有助于對指針的了解。指針變量裡的内容就是編号,指針起這樣的媒介的、連接配接的、引導的作用~~~ 在計算機記憶體中,指針變量中存儲的就是編址後的記憶體的各個編号,這個編号一般叫位址
指針變量裡存儲的是位址,&a也是位址,
p是指針變量,&a是一個具體的位址,
那麼我們可以有下邊的操作:
p=&a;
或者在定義p的時候就指派
int *p=&a;
大家對指針是不是有了一定的了解呢?
(3)、& 與 *
我們先從 * 和 & 後邊接的變量以及作用說起,之後再對第一篇文章中講解的指針的定義進行更加深入的了解
& 和 * 可以了解為 對 緊接在後邊的變量 進行一定的資訊提取
& 和 * 後邊緊接的都是變量,但後邊接的變量有所不同,& 後邊緊接的是存放真實資料的變量(整型變量 a 或者是字元變量 b等),而 * 後邊緊接的是存放位址資料的變量(比如int * 類型的變量或者char *類型的變量)
&a 意味着提取變量 a 的位址,我們想要知道 a 放到哪裡了
*p意味着提取變量p裡存放的位址所對應的存儲空間裡存放的真實資料,我們想知道這個位址處放了什麼内容,101教室上的什麼課。
知道了 * 符号代表的意思,我們來看一下上一篇文章講的指針的定義~
int *p;
定義一個int型資料 a 時,是這樣的語句 int a; 我們不妨類比一下,把 *p 先看成一個整體, *p 就是一個整型變量。
*p是一個整型變量,我們講 * 後邊接的變量是一個指針變量,那麼 p 就是一個指針變量了,那麼 p 就是存放 *p 的記憶體的位址;
*p 是一個整型變量,同時我們能得到 &*p 就是存放 *p 的記憶體的位址;
最終我們得到 p=&*p ~~~~~~
下一篇文章,指針和數組名的關系