在面試過程中,C語言和C++的區別總是面試官的側重點,而指針和引用更是容易被問到,指針和引用的區別很簡單,但很少有人能有全面的,有層次有條理的回答這個問題,所以有條理的總結歸納就顯得尤爲重要。
先來了解什麼是指針,什麼是引用
指針:存儲內存中某一塊空間地址的變量。
引用:引用不是定義一個新變量,而是給一個已經定義的變量起一個新的別名。
定義的格式:
指針:類型 *變量名 = 已有變量地址(&已定義過的變量名)
引用:類型 &引用變量名 = 已定義過的變量名
特點:
指針:1.一個指針只能指向一塊空間
2.指針可以不初始化(不過不建議不初始化)
3.指針可以在初始化的時候指向一個變量,但在之後使用時可以改變它的內容
4.sizeof指針時得到的是所指向對象地址的大小
5.指針自加自減,是指針所指向對象的地址自加自減一個類型大小
引用:1.一個變量可取多個變量名
2.引用必須初始化
3.引用只能在初始化的時候引用一次,不能再改變引用其他的變量
4.sizeof引用得到的是所指向變量的大小。
5.引用自加自減,是引用對象的值自加自減
const修飾的指針和引用:
指針:const修飾指針,指針不能改變,指針指向的內容可以改變。
引用:1.常量具有常性,只有const修飾的常引用才能引用常量
2.const修飾引用,引用內容不能改變
3.不能給不同類型的引用賦值,例如將一個double類型的變量d賦值給一個int類型的引用i,就不能編譯通過。因爲賦值時會生成一個臨時變量。d引用的是這個帶有常性的臨時變量,所以不能賦值。
作爲參數:
1.值傳遞:如果形參爲非引用的傳值方式,則生成局部臨時變量接收實參的值。
2.引用傳值:如果形參爲引用類型,則形參是實參的別名(當不希望函數內改變參數x的地址時,儘量採用常引用傳參)。
3.指針傳參:如果形參爲指針類型,則生成匿名對象接收地址
總結:
1.不要返回一個臨時變量的引用。
2.如果返回對象除了函數的作用域依然存在,儘可能使用引用。
3.指針比引用更靈活,但是也更危險,使用指針時要先檢查指針是否爲空,指針指向的地址釋放後最好置0,否則可能存在野指針問題。
如果還有什麼沒有考慮到的地方歡迎大家指出來!!