要弄明白指針,咱們得先了解內存,咱們先從內存開始提及。
內存是電腦上特別重要的存儲器,計算機中全部程序的運行都是在內存中進行的,全部爲了有效的使用內存,就把內存劃分成一個個小的內存單元,每一個內存單元的大小是1個字節,爲了可以有效的訪問到內存的每一個單元,就給內存單元進行了編號,這些編號被稱爲該內存的地址。
舉例說明
咱們中國國土面積有960萬平方千米,我想在中國找某一所學校,或地方,好比,國防科技大學,咱們不知道它在中國的哪裏吧。咱們確定會打開百度,或者導航搜索一下,國防科技大學,具體在哪一個省哪一個市,那麼導航和百度確定會告訴咱們它的地址,在湖南省長沙市,咱們就能夠經過這個地址方式去找到它。
那麼在咱們電腦的內存也是一樣的思路。
咱們的內存就是一個一個小的內存單元!
內存單元至關於(國防科技大學)
編號至關於(國防科技大學裏的某一棟教學樓或者教室號)
咱們能夠經過地址,能夠很好的定位到某一棟教學樓。
如圖所示:
如圖所示,咱們來思考兩個問題
1.如何給每一個內存單元編號呢?
2.每一個內存單元的大小是多少呢?
思路1:
咱們內存中如何產生地址?有了地址就有編號!
舉例說明:咱們電腦是否是都有一個系統類型32位或64位,32位的系統類型如何產生地址呢?(計算機只能識別二進制)32位系統就會有32個二進制組成。
思路2:
那麼這樣的一個內存單元會是多大呢?
計算機中的單元 從小到大:bit ---byte---Kb---Mb----Gb---Tb.....
咱們猜測一下咱們的內存單元會不會是一個bit大?
若是咱們的內存空間是一個比特位,那麼咱們32個比特位會是多大呢(GB)?
0001 0000 0000 0000 0000 0000 0000 0000 0000
這裏的1表明的是2的32次方
轉換爲十進制爲
4294967296
2的32次方的比特位就等於4294967296
把4294967296比特位換算成字節、kb、mb、gb分別是:
byte=4294967296/8=536870912
KB=536870912/1024=524288
MB=524288/1024=512
GB=512/1024=0.5
最後獲得0.5GB
若是一個內存單元是個比特位的話,2的32次方比特位=0.5GB,也就是說咱們只能訪問內存0.5GB,因此32位類型的機器,給咱們4個GB咱們是否是也用不了。
因此咱們試試一個內存單元是一個字節的話,
咱們就用2的32次方比特位*8=4G 恰好能夠訪問4個G 的空間!!!
因此咱們獲得結論一個內存單元爲一個字節。
因此在32位的平臺上指針的大小爲4個字節
在64位的平臺上指針大小爲8個字節。ide
咱們來看一個列子
如圖所示int a=10;
int整型,佔4個字節,咱們就在內存中給變量a4個字節的空間。
這就是給咱們變量申請內存的一種方式。
以上就是咱們的理論知識!!!
接下來,經過一個代碼也體現咱們的指針。3d
int a = 10;//10放變量a中存起來,變量a的類型爲整型; &a; printf("%p",&a); //整型在 內存中佔4個字節,經過&a就能知道變量a在內存中的地址 如圖所示:
把變量a的地址存起來。指針
int a = 10;//把10放變量a中存起來,變量a的類型爲整型; int* p =&a;//把a的地址放到指針變量p中存起來,p的類型爲指針變量(int*) printf("%p",&a); printf("%p",p);
如圖所示:&a=p 也就是p中存放了a的地址。
經過地址,找到a,而且修改a的值。
*p就是對p中的地址,進行修改。code
int a = 10;//10放變量a中存起來,變量a的類型爲整型; int* p = &a; *p = 20;//經過地址找到a,修改a中的值。 printf("a=%d", a);
注:指針類型區分。
整型指針變量int p
字符指針變量 char pc
……blog