David的“Objective for Java程序员,Part 1”介绍说:
与总是通过引用传递的对象不同,结构通常是通过值传递的。
我对目标C(来自C++)非常陌生,所以我很难理解这一点。在C++中,我可以通过指针或引用传递结构,但不能通过值传递(可能是因为它效率很低)。
目标C是如何实现这一目标的?它真的推动所有的结构成员,一个一个,以一种堆栈一样的方式?
如果结构是由大型/复杂对象组成的,会发生什么?
发布于 2012-09-28 17:32:00
是的,它复制了整个结构,这个结构被传递给调用函数,任何修改都不会影响原来的结构。而缺点当然是因为它速度慢,但也消耗了两倍的空间。
发布于 2012-09-28 17:36:00
它将所有结构成员复制到堆栈中。请记住,结构中的复杂对象是由指向它的指针存储的,所以当您复制结构时,就有了指向复杂类型的复制和点的副本。当然,指针的副本指向内存中与原始对象相同的位置,因此您可以对原始对象执行操作。
当您拥有原始类型和原始复杂对象的副本时,这种方法会导致不可维护的混乱,即使您现在知道自己在做什么。
https://stackoverflow.com/questions/12644673
复制相似问题