有如下代碼:
過程更改(a:int32的數組);
過程更改0(var a:int32的數組);
類型
ta = int32的數組[0..10];
過程更改2(a:ta);
過程更改3(var a:ta);
var
aa:ta;
BB:INT32的數組;
實施
{$ Autobox on}
過程更改(a:int32的數組);
開始
a [0]:= 123;
答:= bb;
結尾;
過程更改0(var a:int32的數組);
開始
a [0]:= 123;
答:= bb;
結尾;
過程更改2(a:ta);
開始
a [0]:= 123;
答:= bb;
結尾;
過程更改3(var a:ta);
開始
a [0]:= 123;
答:= bb;
結尾;
然後執行下面的語句
setLength(bb,11); bb [0]:= 5678;
aa:= ta(&array.createinstance(typeof(int32),11));
AA [0]:= 0;
更改(aa);
MessageBox.Show(aa [0] .tosting());
if&object(aa)=&object(bb),然後massagebox.show('=');
aa:= ta(&array.createinstance(typeof(int32),11));
AA [0]:= 0;
change0(aa);
MessageBox.Show(aa [0] .tosting());
if&object(aa)=&object(bb),然後massagebox.show('=');
aa:= ta(&array.createinstance(typeof(int32),11));
AA [0]:= 0;
change2(aa);
MessageBox.Show(aa [0] .tosting());
if&object(aa)=&object(bb),然後massagebox.show('=');
aa:= ta(&array.createinstance(typeof(int32),11));
AA [0]:= 0;
change3(aa);
MessageBox.Show(aa [0] .tosting());
if&object(aa)=&object(bb),然後massagebox.show('=');
結果發現int32方式陣列,可以改變數組元素的值,但不能改變數組將
Int32既可以改變數組的值,又可以改變變傘的榖地址,輸出5678分鐘的VAR數組
ta方式,不能改變數組元素級級級,但是卻很奇怪倪倪倪,
var ta方式可仏避免,但是卻不是123?
反彙編結果如下
方法公共靜態空隙變化(INT32 [] a)CIL管理
{
//代碼尺寸:13字節(S)
.maxStack
L_0000:LDARG。
L_0001:LDC.I4.0
L_0002:LDC.I4.S
L_0004:Stelem.i4
L_0005:ldsfld int32 [] winform.units.winform :: bb
L_000A:Starg.sa
L_000C:ret
}
。 winform :: bb l_000c:sting.ref l_000d:ret}
。 i4.0 L_000f: ldc.i4.s 123 L_0011: stelem.i4 L_0012: ldsfld int32[] WinForm.Units .Winform::BB L_0017: ldlen L_0019: STLOC.0 L_001A: LD_001B: LD_001C: LD_001C: Ble. s l_0023 l_0 :: stloc.0 l_0023:ltloc.0 l_0024:呼叫void [mscorlib] system.Array :: copy([mscorlib] system.Array.Array,[mscorlib] System.Array,array,int32,int32)l_0029 :ret}}}
。 BB L_000B:LDLEN L_000D:Stelc.0 L_000E:LDARG。 0 l_0019:調用void [mscorlib] system.Array :: copy([mscorlib] system.ararray,[mscorlib] system.Array,int32)l_001e:ret}結論!!
使thearray of int32方式,實際上應於c#的可變數目參數,即paraams int32 []
這種參數方式是傳遞的數組馰地地址(即參數的值),而不是存放數組馰地址的變更改
加上var修飾飾,即加odp修飾飾,傳飾,是存放數組馰組馰組馰組地組地址?
使英語,who,變數組首地址,也不改變原組值
加ODP,好像傳遞的是變量身眰址,迿裡還是沒看懂是為什什什什麼。
對應的c#代碼為
公共靜態空隙變化(params int [] a){a [0] = 0x7b; a = winform.bb;}
|