有如下代码:
过程更改(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;}
|