1.指針與引用的區別
- 指針有自己的一塊空間,而引用只是一個別名
- 使用sizeof函數,指針大小爲4個字節,而引用的大小是被引用對象的大小
- 指針可以被初始化爲NULL,但引用必須是一個對象
- 作爲參數傳遞是,指針需要被解引用纔可以對對象進行操作,而直接對引用修改會改變引用所指的對象。
- 可以有const指針,但是引用不能const
- 指針可以隨時改變指向的對象,而引用只能對一個對象進行引用
- 如果返回動態分配內存的對象或者內存,必須使用指針,引用可能引起內存泄漏
2.堆棧的區別
1.堆棧空間分配的區別
堆:由程序員分配釋放,若程序員不釋放,程序結束時由os回收,分配方式類似於鏈表。
棧:由操作系統自動分配釋放,存放函數的參數值,局部變量的值。
2.堆棧的緩存方式的區別
堆:內存中,存儲的是引用數據類型,引用數據類型無法確定大小,堆實際上是一個在內存中使用到內存中零散空間的鏈表結構的存儲空間,堆的大小由引用類型的大小直接決定
棧:是內存中存儲值類型的,大小爲2M,超出會報錯
3.堆棧上數據結構的區別
堆:堆可以看成是一棵樹
棧:一種先進後出的數據結構
3.new和delete是如何實現的,與malloc和free有什麼異同
1.簡單數據類型
簡單類型直接分配內存,分配失敗不像malloc返回NULL,而是直接拋出異常
2.複雜數據類型
new複雜數據類型先調用operate new,然後在分配的內存上調用構造函數
delete也分兩種
1.簡單數據類型
delete只調用free
2.複雜數據類型
先用析構函數,再調用operator delete
4.struct與calss的區別
1.內部成員變量及成員函數的默認訪問屬性:struct默認防控屬性是public,而class的默認訪問屬性是private(類可以很好的實現封裝屬性)
2.繼承關係區別:struct默認是public的,而class是private
3.class可以用於定義模板函數,struct不行
5.const和static的用法
1.static
修飾全局變量
修飾局部變量
修飾靜態函數
修飾類的靜態成員
修飾類的靜態函數
2.const
修飾類成員:const成員變量不能再類定義處初始化,只能通過構造函數初始化列表進行,並且必須有構造函數
修飾類函數:該函數中所有變量均不可改變