1.指標是什麼?
指標作為c語言中乙個比較令人頭疼的東西,常常讓人們避之不及。但是,指標卻是c語言中的重要組成部分,語言的靈活所在。那麼,指標到底是什麼東西呢?我們來看看下面這個圖。
上面的這個圖可以理解為電腦中的記憶體,記憶體從上到下生長,位址連續降低。記憶體從下到上依次是**區、字元常量區、全域性資料區、堆區和棧區,這裡注意,堆區和棧區之間空有一部分記憶體位址,堆區和棧區相向生長。知道了記憶體之後,我們再解釋位址的概念。
我們都知道,計算機的中心就是cpu,它相當於整個電腦的心臟,但是cpu只有運算功能,沒有辦法來儲存大量的資料,所以,記憶體就充當了儲存資料的角色,但是,記憶體容量有限,並且沒有記憶性,所以又出現了硬碟。這三者的關係就是,計算能力是從高到低的,儲存能力從低到高。當cpu需要計算資料時,它首先必須先獲取這個資料,那麼他怎麼找到這個資料呢,就依賴於記憶體了,記憶體上儲存著需要計算的資料,cpu直接呼叫記憶體上需要計算的這個資料的位址,就可以獲取這個資料了。舉個例子,這就相當於你在宿舍樓裡找某個人,怎麼迅速找到呢?你就得知道他的宿舍門牌號,這個人就相當於cpu要呼叫的資料,門牌號就是記憶體上的位址。
總而言之,指標就是位址,位址就是指標。指標的出現,大大提高了cpu的查詢效率,指標的出現突出了乙個便捷性。
乙個知識點:解引用:這裡說一下解引用這個概念,一般來說,對指標解引用就是指標所指向的物件。比如下面這個**:
int a=10;
int* p=
&a;*p=
20;
我們定義了乙個整形a等於10,然後定義了p是a的位址,第三行*p=20就是將20賦給了a。
看一下這個圖就能理解了,p是a的位址,對p解引用就是a。
2.指標和指標型別
我們在學習c語言的時候,通常會聽到指標和指標變數兩個概念,其實,我們大可不必這麼細緻地去咬文嚼字。因為指標其實也是個變數,只不過這個變數裡面儲存的是存放記憶體單元的位址。
知道了指標也是變數之後,我們來看看指標它在c語言中佔得位元組的大小,這裡需要區分一下,在32位作業系統的電腦下,乙個指標變數的大小是4個位元組,而在64位作業系統的電腦下,乙個指標變數的大小是8個位元組。
我們都知道,變數有很多的的型別,整形,浮點型等。指標相應的也有很多態別,有下面的**:
int a =10;
p=&a;
將a的位址儲存到p中,我們知道p就是乙個指標變數,那它的型別是什麼樣的呢?
char
* pc=
null
;int
* pi=
null
;short
* ps=
null
;long
* pl=
null
;float
* pf=
null
;double
* pd=
null
;
這裡,第乙個就是字元型指標,第二個是整形指標,第三個是短整形指標,第四個是長整形指標,第五個是單精度浮點型指標,第六個是雙精度浮點型指標。總結一下,指標的定義方式是type+*。其實char * 型別的指標是為了存放char型別變數的位址。short * 型別的指標視為了存放short型別變數的位址。int * 型別的指標是為了存放int型別變數的位址。
那麼,我們在知道了指標型別之後,能幹什麼呢?
(1)指標±整數
其中,第乙個、第二個和第四個都是n的位址,所以它們的輸出都一樣。而第三個和第五個的區別是pc的型別是char*,而pi的型別是int*。所以,從中我們可以看出,對指標加1,看起來是加1,其實是加上其所指向型別的大小(實際上是加上sizeof(type)個位元組)。總結:指標的型別決定了指標向前或者向後走一步有多大(距離)。
(2)指標的解引用
這是執行完 * pc=0之後,n的值的變換。
這是執行完 * pi=0之後,n的值的變換。
從後兩張我們可以看到,執行 * pc等於零,改變了n的乙個位元組。而執行 * pi等於零,改變了n整個數。從中我們可以看出來,指標的型別決定了指標解引用的時候能操作幾個位元組。
3.指標運算
指標的運算分為三類:
(1)指標加減整數
指標加減整數,其實就是加減上整數乘以sizeof(type)。
這裡可以看出,pc加了1,pi加了4。那是因為pc的型別是char*,pc實際上加的是sizeof(char);pi的型別是int*,pi實際上加的是sizeof(int)。
(2)指標減指標
兩個指標相減代表的是兩個指標之間所經歷的元素的個數。注意:這裡元素由指標的型別決定。
(3)指標比大小
指標比大小肯定很好理解了,指標是位址,位址有大小,當然指標就可以比大小了啊。
4. 二級指標
我們知道了指標是位址,那麼位址又是乙個資料,是資料的話當然可以用來儲存了,而儲存這個指標的位址的變數就叫做二級指標。簡單來說,存放一級指標的位址的指標就是二級指標。
致我認識和認識我的人
致我認識和認識我的人 面向南,回憶北方的故事,我用兩年的時間來回憶我的初中生活,曾以為時間不會改變一切的稜角已漸漸磨平,才明白曾經的相遇何等的珍貴。分離如此匆匆,匆匆到記不起揮起再見之手。背上行囊,走上硬硬的柏油路,告訴自己不要回頭。我曾偏激的認為真正的感情無需筆記下來,甚至不屑流傳一本同學錄。此刻...
我認識的指標和引用的比較
指標和引用的比較 1.引用必須有初始值 string rs error string ps ok string s xyz string s1 s ok 2.reference比pointer更有效率 原因就是 pointer需要檢查是否為null void print int const int ...
指標系列 認識指標
指標在c 學習中一直是難點和重點,由於在專案中指標應用比較靈活,所以指標所引發的問題比較多,最近針對指標進行重點學習。有人說,掌握指標,也就掌握c語言的精髓。c 中當然也有指標,同時還包括繼承 多型等等。沒有記憶體,就沒有指標,在理解指標的開始階段,先重點講解記憶體五區。如上圖所示 一般下理解記憶體...