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
如下圖所示:
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
C 引數傳遞時到底發生了什麼一(一般傳遞方式)
1 引用型別的變數只包含物件所在的記憶體位址,將要複製的是記憶體位址而不是物件本身,所以對底層物件的修改會保留。unsafe class program fixed int pid mye.id 值為 uint pid uint pid testmethod mye fixed int pid my...
Js new到底發生了什麼
在js中,我們使用了new關鍵字來進行例項化 那麼在這個new的過程中到底發生了什麼?關於建構函式的return 正常來講建構函式中是不用寫return語句的,因為它會預設返回新建立的物件。但是,如果在建構函式中寫了return語句,如果return的是乙個物件,那麼函式就會覆蓋掉新建立的物件,而返...
linux系統啟動時到底發生了什麼
該過程主要功能是完成硬體的初始化,包括顯示器 鍵盤以及主儲存器 記憶體 如果這步有問題的話,你的pc是開不了機的,說明你需要好好檢查下你的硬體裝置了。bois軟體儲存在主機板上的rom晶元上,在此之後,引導過程的其餘部分完全由作業系統控制。一旦bois自檢完成,系統控制由bois轉變為引導引導程式。...