C語言指標
地址
我們想去一個地方,可以通過這個地方的名字來找,比如“中餐廳”,也可以通過這個地方的地址來找,比如“xx路xxx號”。
在程式設計當中,我們可以通過變數名來訪問變數的資料,也可以通過地址來訪問。
注:這兩個地址08和0C相差4個位元組也就是32位,1在記憶體中展現為 28個0 0001,int型就是4個位元組
&是運算子,叫做取址符,用於去除變數對應的地址
*號是運算子,用於取出地址中存放的資料
其實指標就是地址
指標=地址
不同的資料型別
Int 存放的是整數
Char 存放的是字元
Int array【】 陣列,存放的是一串資料
Int *p; 指標,存放的是地址
如何定義執政指標,以下兩種都可以
要知道的是,指標也是變數的一種型別,只是定義的時候需要加一個 *。實際變數名是不帶 * 的。
只有在定義指標的時候是一個識別符號,其他時候都是運算子,表示乘法
或取內容的運算如printf(“%d”,(&a));
用指標訪問變數
指標訪問int、char型,指標的自加
這裡的++p表示先自加再呼叫輸出。
可以看到指向a的地址的指標自加後指標後移了四個位元組,這是因為int型別佔4個位元組
指向c的地址的指標自加後指標後移了一個位元組,這是因為char型別佔1個位元組
這裡的指標自加可以想象成遊標卡尺一段段的後移。
指標與陣列
在實際編寫過程中,定義完指標,給指標變數賦的值應該是地址,所以不能漏掉取址符&
在使用完指標遍歷陣列輸出後,如果還要使用這個指標,應注意指標歸位,否則溢位陣列的範圍會造成出現亂碼(隨機資料)的現象。
練習:輸入三個資料(任意數量)找最大最小算平均,用指標優化 函式體
Main函式
執行結果
注意要點是:
指標用完,下一次再用的是哦胡要注意歸位,否則會出現陣列溢位
在函式中定義了一個指標變數作為形式引數,在主函式傳遞時傳遞的應是地址或相應指標變數
在陣列中,相鄰元素的地址是連續的(相隔相應型別所佔位元組,如int就是4bit,指標自加時也會跳轉相應的地址所佔位元組個數),在使用指標(地址)表示資料時,除了注意自加,還不能忘記加上 * 表示指標所指地址中所存放的資料。
使用完指標注意自加,再迴圈體內要注意自加的位置。
為什麼要用指標
C語言可以通過指標將資料存放在想要的地址當中,這是其他語言沒有辦法做到的
int *p2=(int *)0x0060FEF4;//先將這個地址強制轉換,告訴編譯器這個地址上將儲存一個int型別
//沒有強制轉換則系統不知道要存什麼型別,就不能直接存,*(0x0060FEF4)=10;是錯的
*p2 = 10;//p2指標指向地址,用 * 取值,即將10存放再這個地址
//上方兩句也可寫成 *(int *)0x0060FEF4=10;
要點就是要掌握上方的這些。
地址需要加上 * 符號作為取址符才能訪問它所存放的資料,而這裡是識別符號。
指標定義中int* p;p是指標即地址,int *表示地址中存放的資料是int型,加上括號 (int *)地址 強制轉換,和(float)是一個道理。
需要強制轉換才能存放資料的原因:
我們不知道我們想要用的地址是否已經存了別的資料,存的資料是什麼型別,所以需要強制轉換再使用。
這樣交換,a和b並沒有緩過來,思考為什麼?
而用指標的方式可以交換
把他簡化一下
可以看到a的值在函式中發生了變化,但是在輸出時還是10.
這是因為在函式體執行中,當輸出完a的值,函式執行結束,函式體內的東西都會被清空。
在主函式中,a=10會存在某個地址,函式體當中,a的值會存放再另一個地址。當函式執行結束,存放函式體的a的地址會被釋放。所以沒有改變主函式的a的值。
在函式中,對p修改就是對(0x0060FF08)進行修改。
——理解為:p是存放地址的指標變數,p就是0x0060FF08,兩者是等價的,對p修改就是對(0x0060FF08)進行修改,只是指標變數p存放在0x0060EFE4這個地址,在函式執行完後,這個地址釋放,而主函式中a的值能夠修改。
第一種情況有兩個地址,兩個10;第二種情況傳遞的是10的地址,只有1個10.
這裡再回顧指標的定義,int *p;
定義時的*作為識別符號,表示這裡定義的是指標變數,這個指標變數的變數名是p,用於存放一個地址—— p=&a;這裡&是取址符。
P是地址,不是資料,如果要讀取或改變p中的資料需要加上 * 。printf(“%d”,*p);
相關文章
- c語言指標彙總C語言指標
- C語言指標用法大全C語言指標
- C語言 函式指標C語言函式指標
- C語言指標筆記C語言指標筆記
- C語言基礎-指標C語言指標
- C語言指標學習C語言指標
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- C語言知識彙總 | 51-C語言字串指標(指向字串的指標)C語言字串指標
- C語言知識彙總 | 56-C語言NULL空指標以及void指標C語言Null指標
- C語言指標詳解(一)C語言指標
- C語言指標詳解(二)C語言指標
- C語言 指標與陣列C語言指標陣列
- C語言基礎-1、指標C語言指標
- c語言實現this指標效果C語言指標
- 搞清楚C語言指標C語言指標
- C語言指標基本知識C語言指標
- c語言-運算子,陣列,指標C語言陣列指標
- C語言指標常見問題C語言指標
- c語言函式指標的定義C語言函式指標
- C語言指標應用程式設計C語言指標程式設計
- C語言學習之:指標與字串C語言指標字串
- c 語言指標操作經典問題指標
- C語言指標和陣列筆試題C語言指標陣列筆試
- C\C++語言重點——指標篇 | 為什麼指標被譽為 C 語言靈魂?(一文讓你完全搞懂指標)C++指標
- GO語言————4.9、指標Go指標
- C語言指標總結大學霸IT達人C語言指標
- 如何掌握 C 語言的一大利器——指標?指標
- (C語言)使用指標列印陣列的內容C語言指標陣列
- C語言語法基礎--S2函式和指標C語言函式指標
- c語言野指標與結構體指標動態記憶體分配小解C語言指標結構體記憶體
- go 語言指標學習Go指標
- C語言學習筆記之指標的運算C語言筆記指標
- C語言函式指標與回撥用函式C語言函式指標
- C語言學習筆記:結構體與指標C語言筆記結構體指標
- C語言:利用指標檢查字串是否是迴文C語言指標字串
- 實驗5 C語言指標應用程式設計C語言指標程式設計
- 標準C語言1C語言