C 引數傳遞時到底發生了什麼一(一般傳遞方式)

2022-07-26 01:24:12 字數 1641 閱讀 8738

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轉變為引導引導程式。...