《C語言筆記 指標相關(一)》

2022-05-23 15:24:08 字數 1138 閱讀 6076

一,野指標問題

1,什麼是野指標?

野指標就是指標指向了乙個不可知的位置(隨機的、不正確的、限制訪問的)。

2,會造成什麼危害?

第一種情況,指向乙個不可訪問的位址(比如核心空間),會觸發段錯誤,這種算是最好的情況。

第二種情況,指向乙個可用的但是沒有什麼特別意義的空間(比如說曾經使用過但已經不用了的棧空間或堆空間),這個時候程式執行不會出錯,也不會對當前程式造成損害,這種情況下會掩蓋你的程式,讓你以為程式沒有錯誤,其實是有問題的。

第三種情況,指向了乙個可用的空間,而且這個空間在程式中正在被使用著(比如說乙個變數x),那麼野指標的解引用就會剛好修改這個變數的值,導致這個變數被莫名奇妙的改變,使得程式出現離奇的錯誤。一般最終會導致程式崩潰,或者資料損害。這種危害是最大的。

3,怎樣避免野指標?

常規做法:

第一點:定義指標時,同時初始化為null。

第二點:在指標解引用前,先判斷這個指標是不是為null。

第三點:指標使用完後,將其賦值為null。

二,const關鍵字和指標

const關鍵字修飾變數表示這個變數時常量,是唯讀的,不可也不必修改的。

const修飾區域性變數時,並不是真正的不可修改,可以通過「騙過」編譯器來修改其值。當修飾全域性變數是便是真正不可修改。

當修飾的是全域性變數時,編譯時編譯器將這是被const修飾為常量的變數放在了**段,之後便真正不可修改。

當修飾的是區域性變數時,這個變數是存放在棧中,故而只要「騙過」編譯器便仍可以修改其值。

#includeconst

int b = 20

;int

main()

const修飾指標的4種形式。

第一種:const int *p,指標指向的變數不可修改。

第二種:int const *p,同第一種指標指向的變數不可修改。

第三種:int * const p,指標不可修改。

第四種:const int  * const p,指標變數本身和指標指向的變數都不可修改。

關於指標變數的理解,主要涉及到兩個變數:第乙個是指標變數本身(p),第二個是指標p指向的那個變數(*p)。乙個const只能修飾乙個變數,所以弄清這四種形式的關鍵就是搞清楚const放在哪個位置就是修飾誰的。 

《C語言筆記 指標相關(一)》

一,野指標問題 1,什麼是野指標?野指標就是指標指向了乙個不可知的位置 隨機的 不正確的 限制訪問的 2,會造成什麼危害?第一種情況,指向乙個不可訪問的位址 比如核心空間 會觸發段錯誤,這種算是最好的情況。第二種情況,指向乙個可用的但是沒有什麼特別意義的空間 比如說曾經使用過但已經不用了的棧空間或堆...

《C語言筆記 指標相關 二 》

指標型別決定了指標如何參與運算 1,指標參與運算時,因為指標變數本身儲存的數值是表示位址的,所以運算也就是位址的運算。2,指標參與運算的特點是,指標變數加1並不是真的加1,而是加1 sizeof 指標型別 如果是int 指標,則加1實際上就是表示位址 4 位址 sizeof int 如果是char ...

C語言指標學習筆記一

一 指標陣列和陣列指標的區別 指標陣列 是乙個陣列,但是陣列裡儲存的資料型別是指標 陣列指標 是乙個指標,但是指標的型別是指向乙個陣列 int array 4 定義了乙個有4個int 資料型別的陣列 int p 4 定義了乙個具有4個int資料型別的陣列的指標 初始化 int array 4 int...