關於指標:
一維指標儲存基本變數的位址
二維指標儲存一維指標變數的位址
三維指標儲存二維指標變數的位址
詳解:【linux c】**指標(一)
關於傳參:
傳一維陣列名,用陣列元素的指標來接
傳二維陣列名,用一維陣列的指標來接
傳三維陣列名,用二維陣列的指標來接
傳指標陣列,用指標的指標接
關於陣列名:
一維陣列名:指標常量,指向陣列首元素的位址
二維陣列名:首個一維陣列的位址(首行的位址)
三維陣列名:首個二維陣列的位址
如何避免野指標(養成良好的程式設計習慣):
1、當定義乙個指標,且該指標沒有指向時,將其置為空。
2、當要往指標指向的空間賦值時,先看是否給它分配了合法的空間。
&a;*(&a) == a;
1、對一維陣列的陣列名取位址等於陣列的位址。
對一維陣列的位址取值等於陣列首元素的位址。
2、對二維陣列的陣列名取位址等於二維陣列的位址。
對二維陣列的位址取值等於首個一維陣列的位址。
3、對三維陣列的陣列名取位址等於三維陣列的位址。
對三維陣列的位址取值等於首個二維陣列的位址。
陣列與指標的區別(主要):
陣列指標
空間分配
靜態分配
動態分配
訪問效率
直接訪問,效率高
間接訪問,效率低
安全性資料越界
記憶體洩漏
函式形參
都轉化成相應的指標
你的資料放在**:
棧(stack):區域性變數、函式形參、自動變數
堆(heap):malloc、realloc、calloc分配的空間
資料區(.bss段):未初始化的全域性變數
資料區(.data段)(靜態資料區):初始化過的全域性變數、靜態static修飾的變數
資料區(.rodata段):常量資料
**段(.text段):**
常見的記憶體錯誤及應對:
1、記憶體分配未成功,卻使用了它。
應對:在使用之前檢查記憶體是否分配成功。可以在使用記憶體之前檢查指標是否為null,若分配成功便可以使用,否則列印錯誤資訊並退出程式。
2、記憶體雖然分配成功,但是尚未初始化就引用它。
應對:①注意賦初值
②在檢查記憶體分配成功之後,先用memset或bzero函式清空分配好的記憶體空間原來的資料。
3、記憶體分配成功並且已經初始化,但操作越過了記憶體邊界。
應對:在使用陣列時,注意是否操作越界。有沒有下標「多1」或「少1」的操作,特別要注意迴圈。
4、忘記了釋放記憶體,造成記憶體洩漏。
應對:用完了動態記憶體之後一定要釋放。動態記憶體的申請與釋放必須配對,程式中malloc與free的使用次數一定要相同,new/delete同理。
5、釋放了記憶體卻繼續使用它。
應對:釋放完記憶體之後要及時將指標置空。
指標 陣列及記憶體管理
我們先來了解一下c與c 的記憶體管理。常見的記憶體錯誤及其對策 發生記憶體錯誤是件非常麻煩的事情。編譯器不能自動發現這些錯誤,通常是在程式執行時才能捕捉到。而這些錯誤大多沒有明顯的症狀,時隱時現,增加了改錯的難度。有時使用者怒氣沖沖地把你找來,程式卻沒有發生任何問題,你一走,錯誤又發作了。常見的記憶...
指標(記憶體管理)
直接上總結 四種指標 前倆種是泛型 後倆種是普通的指標 unsafepointer unsafemutablepointer unsaferawpointer unsafemutablerawpointer 簡單示例 一 1.泛型指標示例 2.普通指標示例 3.應用示例 獲得變數的指標 二 1.示例...
C C 指標 陣列與記憶體管理(三)
關於c c 的記憶體管理,博主發現一篇博文已經總結的很好了。記憶體管理 這裡做幾點總結 1 函式體內的區域性變數儲存在棧上,但棧的記憶體容量有限,在linux下可以使用ulimit s檢視棧的記憶體容量。在程式中注意不要超過這個值。當相應的範圍結束時,區域性變數就不能在使用。2 使用malloc n...