![]() |
1
2
假设sdata是一个局部变量,它将位于堆栈中,并且将 参考 方法返回的数组。方法不返回数组本身的内容,而是返回对数组的引用。 在.NET中,数组是第一类对象,所有数组类型变量实际上都是引用。 |
![]() |
2
6
该分配将简单地分配sdata以引用construct_命令返回的实例。不会复制数据。 一般来说,clr将世界分为两种类型
数组是CLR中的引用类型,因此不会导致基础值的复制。 |
![]() |
3
3
数组是引用类型,这意味着实际数组是在堆上实例化的(可能是由construct_command()实现的),函数返回对数组的引用,并将其存储在(本地变量)sdata中。 因此,这实际上不是关于内存语义(返回值可以为空),而是关于引用类型的复制语义。这种情况完全等于,例如:
更直截了当一点:在.NET中根本不能传递数组,只能传递、复制和分配对数组的引用。 |
![]() |
4
2
sdata将指向从函数返回的内容。C中的数组是引用类型,这意味着从另一个数组分配一个数组只是复制引用,而不是分配新数据。 |
![]() |
5
2
数组是引用类型,因此只复制引用。没有内容操作。 |
![]() |
6
0
|
![]() |
7
0
尽管芮成华的回答总体上很好,但我确实认为其中的一部分是错误的。从堆栈内存分配数组,然后通过引用访问,这是没有意义的(非常不一致)。如果这是真的,那么底层内存可以从传递引用的任何方法的底层释放。 我相信当亨克·霍尔特曼非常直接和明确地说:
谢谢你亨克的评论,我认为这是一个关键部分,否则会错过(并与)接受的答案相矛盾。 (我本来会回复一条评论,但我没有足够的回复点,我认为重要的是要指出接受的答案有这个问题,我需要在这里添加一条新的评论。)也许管理员可以从答案中删除对“局部变量,它将在堆栈中”的引用。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |