下面一段關於getmemory()的**是面試時最容易出現的題目。
發現自己在解釋原理的時候,還是有點「拗口」, 就來總結一下吧。
下例實際上涉及的就是傳參的方式或堆記憶體的傳遞(堆記憶體靠指標來傳遞)。
傳參的方式:
1.值
2.指標(如果變數本身就是乙個指標,把此變數當作乙個物件,就要傳指標的指標?)
3.引用(實際就是傳變數本身,不管變數是乙個物件還是乙個指標)
詳見**注釋。
#include using namespace std;
//之前我對這裡的疑惑:
//傳指標不是不會拷貝副本嗎?(這裡把指標也當物件用?)
//當傳入str時,str與p值一樣,指向也一樣,當p改變指向時,str也應該改變指向?
void getmemory(char *p)
{ // p是str(實參)的拷貝,它們的值相同,但是位址不同。
// 如果實參本身是乙個物件(傳值),這裡就是這個物件的指標
cout《區域性變數返回值」。
堆記憶體 棧記憶體
從堆和棧的功能和作用來通俗的比較,堆主要用來存放物件的,棧主要是用來執行程式的.而這種不同又主要是由於堆和棧的特點決定的 在程式設計中,例如c c 中,所有的方法呼叫都是通過棧來進行的,所有的區域性變數,形式引數都是從棧中分配記憶體空間的。實際上也不是什麼分配,只是從棧頂向上用就行,就好像工廠中的傳...
傳遞引數 和 堆
棧用來存值 堆用來存引用 例項 function setname obj var person new object 物件a setname person console.log person.name 最後輸出為 rui 順序 建立新的物件 賦予 變數person 呼叫函式 setname,將 物...
物件引數傳遞中 棧和堆的記憶體分析
物件記憶體的理解 1 物件資料存放在堆裡面,2 基本型別的變數和物件的引用變數都在函式的棧記憶體中分配。特別的 1.陣列是物件。2.string型別是特殊型別 下面有個例子 string str new string good string str2 123 main ex new main ex....