C/C++面試題目集錦

一、指針與引用的區別程序員

從四個方面出發考慮不一樣點緩存

(1)從定義出發,指針是一個變量,所存內容爲指向變量在內存中的存儲地址;而引用只是原變量的一個別名,和原變量佔同一個存儲單元。數據結構

(2)初始化:指針能夠初始化爲NULL,能夠改變指向的內容;而引用不能夠,在使用時必須初始化,且初始化後不能改變。函數

(3)使用:在使用時,指針能夠多級(**p),而引用只能一級;引用使用時無需解引用(*),指針須要解引用。spa

(4)大小:"sizeof引用"獲得的是所指向的變量(對象)的大小,而"sizeof指針"獲得的是指針自己的大小指針

2.堆和棧的區別對象

2.1 概念內存

堆、棧是一種數據按序排列的數據結構。編譯器

在一個由C/C++編譯的程序佔用的內存分爲四部分:棧區、堆區、靜態存儲區、代碼區。編譯

2.2 區別

(1)堆棧空間分配

   棧:由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。

   堆:通常由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。在運行時動態分配內存。  

(2)堆棧緩存方式

   棧:一級緩存,使用完當即釋放。

   堆:二級緩存

(3)堆棧數據結構區別

棧:棧是一種後進先出的數據結構。

堆:能夠當作是一棵樹。

(4)申請大小的限制

棧:棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意  
  思是棧頂的地址和棧的最大容量是系統預先規定好的,在WINDOWS下,棧的大小是2M(也有  
  的說是1M,總之是一個編譯時就肯定的常數),若是申請的空間超過棧的剩餘空間時,將  
  提示overflow。所以,能從棧得到的空間較小。    
堆:堆是向高地址擴展的數據結構,是不連續的內存區域。這是因爲系統是用鏈表來存儲  
  的空閒內存地址的,天然是不連續的,而鏈表的遍歷方向是由低地址向高地址。堆的大小  
  受限於計算機系統中有效的虛擬內存。因而可知,堆得到的空間比較靈活,也比較大。    

可是容易產生碎片。

相關文章
相關標籤/搜索