關於指針,我對初學C語言的同窗們真的有話要說!2

昨天,我大膽地從不知道是什麼角度,泛泛地把指針的一些問題談了起來。

今天,我們還是繼續再談談吧!

在C中如果要說指針的話,其實更確切的說應該是定義的指針變量, 那麼對應起來就是指針的常量,這兩者之間說起來還是挺好區分的。我們知道變量一定是分配存儲空間的,而常量是本來就存在的,那麼本質的區別在哪裏呢?

還是拿個具體的例子來說一下吧

如果我們int a;定義了一個整型變量發生了什麼呢,有同窗就說了真有什麼了不起,不久是一個整型變量嗎,其實這裏面還真有點大家都不注意的門道啊!

第一:這樣一條語句如果是放在局部和放在全局是不同的,有什麼不同呢?若是放在局部就會在程序的棧區域中申請4個字節的存儲空間,但是前提是函數被調用時才分配,如果不調用就不會分配,可是全局的據說是在靜態區域內分配存儲空間,當然,我我個人認爲,在棧也無所謂,如果程序不終止,則棧中預留的空間則不會被銷燬。

第二既然分配了空間,那麼它就會有一個地址,也就是我們通常用的&a,這就是a變量在內存中虛擬地址,那麼這個地址就是相對固定的,所以&a即可稱之爲一個地址的常量。

第三這個地址開始的向高處的連續的四個單元給了a,因此上a = 5;就是從對&a處開始連續的四個字節賦值5,本意就是第一個字節5,第二個字節,三個字節,四個字節可不能閒着也要,清空爲0;這樣纔算是定義了一個變量

第四如果這是我們又定義了一個int* p;就是又分配了一個指針的存儲空間,它將要指向一個整型的變量,&p是這個整型指針變量的地址,而p本身是一個指向整型數據的指針變量,也就是說從&p開始向高處四個單元,這四個單元都是未被初試化,是一些隨機的數值,也就是我們通常稱爲的野指針。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章