1. 指標是什麼?
指標是變數,所以指標有變數的特性:a.系統為指標分配記憶體空間;
b.指標有自己的
位址;c.指標能夠存值,但這個值比較特殊——位址。
2. 指標的型別和指標所指向的型別
指標的型別:把指標宣告語句中指標名字去掉,剩下的部分即為這個指標的型別;
指標所指向的型別:把指標宣告語句中的指標名字和名字左邊的指標宣告符」*」去掉,剩下的就是指標所指向的型別。
3. 指標的值
指標的值也叫指標所指向的記憶體區或位址。指標的值是指標本身儲存的數值將被編譯器當做乙個位址。指標所指向的記憶體區就是從指標的值所代表的那個記憶體位址開始,長度為sizeof的一片記憶體區。乙個指標的值為
xx,即該指標指向了以
xx為首位址的一片記憶體區域;乙個指標指向了某塊記憶體區域,即該指標的值是這塊記憶體區域的首位址。
4. 指標的算術運算
(1)指標±整數
只能用於指向陣列中某元素指標,結果型別為指標。對乙個指標加1使其指向陣列下乙個元素,乙個指標減
3使其向左移動
3個元素的位置。若進行完加,減法後,指標指向的位置不在陣列範圍內,則陣列越界,對這個指標間接訪問,引用操作可能會失敗。
(2)指標-指標
當兩個指標都指向同一陣列中的元素時,才允許從乙個指標減去另乙個指標。指標相減結果型別為ptrdiff_f(有符號整型)。減法運算的值是兩個指標在記憶體中的距離,結果將除以陣列元素型別長度。
5. 間接引用和直接引用的區別
對於已說明的變數,變數名即對變數值的直接引用;
對於指向變數或記憶體中的任何物件的指標,指標即對物件的間接引用。
6. 常量指標和指標常量
指標常量:指標本身不可變,而內容可以修改。
注:a.若指標常量指向的是字元指標常量,那修改
*p時,在編譯時可通過,但執行時不能通過;
b.指標常量指向另外乙個指標時,當這個指標指向別的內容時,指標常量還是指向原先的內容。
7. 空指標是什麼?其使用方法?
空指標:不指向任何物件。其值為null,是在「
stddef.h
」中定義的乙個巨集,值和任何有效指標值不同。
null
是乙個純粹的0,
null
可能是0、0l
、(void*)0
。 使用方法:a.用空指標終止對遞迴資料結構的間接引用。遞迴指乙個事物由這個事物本 身來定義。最簡單,常見的遞迴資料結構是單向鍊錶,鍊錶中的每個元素都包含乙個值 和乙個指向鍊錶中下乙個元素的指標。
b.用空指標進行函式呼叫失敗時的返回值。
c.用空指標作警戒值。 警戒值是標誌事物結尾的乙個特定值。
8. 關於解決野指標的方案
(1)定義指標時,把指標變數賦值為
null;
(2)釋放記憶體時,先判斷指標變數是否為
null;
(3)釋放記憶體完畢後,把指標變數重新賦值為
null
9 記憶體分配未成功,卻使用了它
常用解決辦法是,在使用記憶體之前檢查指標是否為null。如果指標
p是函式的引數,那麼在 函式的入口處用
assert(p!=null)
進行檢查。如果是用
malloc
或new
來申請記憶體,應該用
if(p==null)
或if(p!=null)
進行防錯處理。
10記憶體分配雖然成功,但是尚未初始化就引用它
犯這種錯誤主要有兩個 起因:一是沒有初始化的觀念;二是誤以為記憶體的預設初值全為零,導致引用初值錯誤(例如陣列)。記憶體的預設初值究竟是什麼並沒有統一的標準,儘管有些時候 為零值,我們寧可信其無不可信其有。所以無論用何種方式建立陣列,都別忘了賦初值,即便是賦零值也不可省略,不要嫌麻煩。
常見問題 朗動常見問題
常見問題一 方向盤變沉 檢查胎壓是否正常,輪胎是否過度磨損。助力幫浦不工作,前輪氣壓低。冬天的話,冷車在冬天助力油比較稠,方向會重一點。檢查轉向助力油。1 應該是是助力系統有問題或則助力潤滑油有問題。2 如果你在駕車時感覺方向盤變緊,汽車偏向一側,需要檢查輪胎,或進行車輪平衡 定位。在這些問題剛剛發...
跨函式使用記憶體 指標常見問題
include include voidf1 int q intmain 執行結果 分析 靜態 main函式中 p 指向 i 的位址,所以,p i 呼叫 f1 函式時,q 拷貝了 p 的內容即 i 的位址,故 q p i 所以 i 的值改變了。include include voidf2 int q...
面試常見問題 1 this的常見問題
this 的含義 this關鍵字是乙個非常重要的語法點。毫不誇張地說,不理解它的含義,大部分開發任務都無法完成。前一章已經提到,this可以用在建構函式之中,表示例項物件。除此之外,this還可以用在別的場合。但不管是什麼場合,this都有乙個共同點 它總是返回乙個物件。簡單說,this就是屬性或方...