指針面試例題解析———總結

*指針是C和C++的精華所在,也是C和C++ 的一個十分重要的概念。一個數據對象的內存地址稱爲該數據對象的指針。指針具有不同的類型,可以指向不同的數據存儲體

面試例題1:指針和引用的差別?

答案:(1)非空區別:在任何情況下都不能使用指向空值的引用。一個引用必須總是指向某些對象。

(2)合法性區別:在使用引用之前不需要測試它的合法性,相反,指針則應該總是被測試,防止其爲空

(3)可修改區別:指針和引用另一個重要的區別是指針可以被重新賦值以指向另一個不同的對象,但是引用總是指向在初始化時被指定的對象,以後不能改變,但是指定的對象其內容可以改變

(4)應用區別:總的來說,在以下情況應該使用指針,一是考慮到存在不指向任何對象的可能(在這種情況下,能夠設置指針爲空)二是需要能夠在不同的時刻指向不同的對象(在這種情況下,你能改變指針的指向)如果總是指向一個對象並且一旦指向一個對象就不會改變指向,那麼就應該使用引用


面試例題2:什麼是野指針?野指針的危害?如何避免?

答案:野指針:指向不確定地址的指針變量(即沒有初始化)使用野指針易因內存泄露出現段錯誤。而造成內存泄露的原因有兩個:

1.訪問了沒有權限的內存(平時我們正確使用指針的時候,系統應經將相應的內存分配給用戶,但是如果指向沒有分配的內存,系統會判定我們沒有權限)
2.訪問了已經釋放了的內存。


因爲野指針主要是因爲我們平時編程習慣造成的,因此我們只能避免野指針的出現,而不能杜絕。(請注意用詞)我們在編程時,做到以下幾點可以有效地避免野指針的出現。

第一,當一個指針沒有指向時,我們一般默認指向NULL。(NULL代表內存的0地址,並且NULL是不允許做任何操作的)

第二,使用malloc分配內存。(在堆空間裏分配內存)
#difine  MAX_SIZE  1024;
char *ptr = (char *) maollc  (sizeof (char) * MAX_SIZE);

請認真研究這樣的表達式的優點,這個表達式在代碼的維護性,擴展性都大大提高了。這方面是我們平時寫代碼時所應該提高的。

使用malloc也是有講究的,我們應該依照下面的流程:
1.分配內存。(分配成功,返回內存的首地址;分配不成功,返回NULL)。
2.檢查是否分配成功(若失敗,則  exit(1) 退出程序)。
3.清空內存中的數據 (malloc分配的空間裏可能存在垃圾值,因此我們需要清空,可以用到memset或bzero 函數)。
4.使用內存。
5.釋放內存(free,這時ptr又變成野指針)。
6.寫成NULL。


面試例題3:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章