1、 引用型別的變數只包含物件所在的記憶體位址,將要複製的是記憶體位址而不是物件本身,所以對底層物件的修改會保留。
unsafe class program輸出為:; fixed (int* pid=&(mye.id))
,值為", (uint)&(*pid), (uint)*pid);
}testmethod(mye);
fixed (int* pid = &(mye.id))
,值為", (uint)&(*pid), (uint)*pid);
}console.readline();
}static void testmethod(employee mye)
;fixed (int* pid = &(mye.id))
,值為", (uint)&(*pid), (uint)*pid);}}
}
方法執行前,mye中id的位址為0x1af5be0,值為4執行過程為:方法執行中,mye中id的位址為0x1af5be0,值為5
方法執行後,mye中id的位址為0x1af5be0,值為5
1) 在堆中新建物件mye,在棧中建立指向mye的指標
2) 按引用傳遞,所以在棧中新建指標,複製上面指標的位址,也指向mye
3) 方法結束後mye的修改被保留,新指標被拋棄(等待垃圾**)
如下圖所示:
2、 如果在方法內部將記憶體位址指向乙個新物件,則方法結束後在方法中所作的修改會被丟棄(原指標仍指向原物件,方法引數指向新物件,結束後一起銷毀)。
unsafe class program輸出為:; fixed (int* pid=&(mye.id))
,值為", (uint)&(*pid), (uint)*pid);
}testmethod(mye);
fixed (int* pid = &(mye.id))
,值為", (uint)&(*pid), (uint)*pid);
}console.readline();
}static void testmethod(employee mye)
;fixed (int* pid = &(mye.id))
,值為", (uint)&(*pid), (uint)*pid);}}
}
方法執行前,mye中id的位址為0x1e77be0,值為4執行過程為:方法執行中,mye中id的位址為0x1e78e24,值為5
方法執行後,mye中id的位址為0x1e77be0,值為4
1) 在堆中新建物件mye,在棧中建立指向mye的指標
2) 按引用傳遞,所以在棧中新建指標,複製上面指標的位址,也指向mye
3) 方法中new乙個新物件時,在堆中新建物件,並把位址傳給指標2
4) 方法結束後新物件和新指標2均被拋棄,修改也同時拋棄(等待垃圾**)
C 引數傳遞時到底發生了什麼
1 引用型別的變數只包含物件所在的記憶體位址,將要複製的是記憶體位址而不是物件本身,所以對底層物件的修改會保留。unsafeclassprogram fixed int pid mye.id 值為 uint pid uint pid testmethod mye fixed int pid mye....
Js new到底發生了什麼
在js中,我們使用了new關鍵字來進行例項化 那麼在這個new的過程中到底發生了什麼?關於建構函式的return 正常來講建構函式中是不用寫return語句的,因為它會預設返回新建立的物件。但是,如果在建構函式中寫了return語句,如果return的是乙個物件,那麼函式就會覆蓋掉新建立的物件,而返...
linux系統啟動時到底發生了什麼
該過程主要功能是完成硬體的初始化,包括顯示器 鍵盤以及主儲存器 記憶體 如果這步有問題的話,你的pc是開不了機的,說明你需要好好檢查下你的硬體裝置了。bois軟體儲存在主機板上的rom晶元上,在此之後,引導過程的其餘部分完全由作業系統控制。一旦bois自檢完成,系統控制由bois轉變為引導引導程式。...