凡是學過程式設計的人,特別是從c起步的,都會去學習乙個叫做指標的東西,而且好多人都會被卡在指標這裡,覺得特別難以理解,不知道指標到底是乙個什麼東西,也不知道什麼時候使用指標,什麼時候不使用指標。
其實指標並沒有那麼複雜,關鍵是要理解透徹。我們編寫程式,不管是什麼語言程式設計,無論是面向過程還是物件導向,程式最終都將被轉換成機器語言被執行。而機器語言是怎樣執行的呢,其實就是cpu不斷的定址,從記憶體中讀取資料,進行運算。說道這裡,就要詳細講解一下記憶體。我們程式的執行離不開硬體,記憶體是硬體中必不可少的,根據**處理器的不同,記憶體被劃分成一塊一塊,而且每一塊記憶體都有自己的位址。這裡以最簡單的8位機為例,它的記憶體位址都是0x00001111這樣的數字。我們在程式中定義乙個常量或者變數,其實都是指向乙個或幾個記憶體塊,舉乙個最簡單的例子,int sum=32;這條語句就申請了乙個記憶體空間,如圖所示,假如說記憶體位址就是0x000這樣(當然實際中不可能是這樣)。我們定義了sum這個變數,實際上就是讓sum等於
0x000,當我們對sum這個變數進行操作的時候,比如sum+16或者sum++等,並不是操作sum或者說0x000這個數值,而是操作這個位址裡邊的東西。
下邊來說指標,一般我們定義指標,都要加乙個* 號,比如int *p,這裡就要注意了,這個表示式並不是int和*p,而是int * 和p,p依然是乙個位址,如圖p可以看做是0x006這塊記憶體,只不過這個記憶體裡儲存的是乙個位址,而不像
sum,sum裡儲存的是乙個整形資料,p儲存的是乙個位址,這個儲存的位址裡邊存放的是乙個整形資料。再比如
int **n,n依然只是乙個位址0x008,只不過這個位址裡邊存放的是乙個指標p。
那麼指標怎樣操作呢,這裡就要看實際情況了。是要運算元據還是要操作記憶體位址,比如說*p就要操作p位址裡邊存放的位址指向的內容,也就是說0x000中的內容,就是32這個資料。而p就是操作p位址裡邊的內容,也就是說操作0x000這個資料,依次類推,**n就是操作32這個資料,*n就是操作0x000這個資料,n就是操作0x006這個資料。
這個大家就應該明白了,符號的不同就是操作的資料不同,但都是對資料進行操作。我們通常用p=&sum,實際上就是在p的位址裡放入sum的位址這個資料,具體是要操作哪個資料,就要看實際需要了。
到這裡大家應該基本明白指標式怎麼一回事了,也應該知道到底該怎麼操作指標了。
C語言中指標的操作
c語言中指標操作主要有以下幾種 指標減去乙個整數 模擬上面的4。指標自減 模擬上面的5.求差值 通常對指向乙個陣列兩個不同元素的指標求差值,代表兩個元素位置的差值。示例 include int main void int ptr1,ptr2,ptr3 ptr1 urn ptr2 urn 2 prin...
C語言中關於指標等相關理解和使用事宜
指標是乙個變數,其值是另乙個變數的位址,位址代表的是在記憶體中的位置。需要記住的是,陣列變數本身就是乙個指標。int ip 乙個整型的指標 double dp 乙個 double 型的指標 float fp 乙個浮點型的指標 char ch 乙個字元型的指標 其實指標永遠都只是乙個代表乙個位址的十六...
c語言中指標中 和 。的區別
比如有如下結構 typedef strut node listnode listnode p listnode malloc sizeof listnode 上面語句中涉及到 指標變數和結點變數兩個概念 變數p 是listnode 型別的指標變數 p的值指向某乙個結點的位址 p所指向的 listno...