3

推荐使用什么,将结构作为指针传递给constie


int doCalculations(const MyStruct* my_struct);

或通过struct值传递,如,


int doCalculations(MyStruct my_struct);

为什么?

在 C++ 中,我记得在某处读过,当/有一个非平凡的构造函数时,const应该使用传递引用。在 C 中虽然没有构造函数,但我想仍然需要一些时间来制作.structClassstruct

4

2 回答 2

4

如果您打算修改您的结构,那么您显然必须通过指针传递它。

如果您不打算修改您的结构,那么通常的做法仍然是通过指针传递以避免不必要的复制。指针会占用sizeof(void *)内存,但可以通过寄存器传递(因此根本不使用堆栈内存)。

按值传递结构几乎总是会在堆栈上复制它。

您必须选择的两种情况:

  • 如果您的结构可能被外力修改(即它具有volatile)字段,那么您可能希望通过指针传递它,以便始终拥有最新版本。
  • 如果您的结构在函数执行期间可能不再存在(例如,另一个线程free是该内存),那么您显然必须制作它的副本(按值传递)。
于 2013-07-08T16:25:21.827 回答
0

不建议按值传递结构的原因有两个:

1)。将结构内容复制到新的临时变量所花费的时间。

2)。将被浪费的堆栈空间量,尤其是在结构很大的情况下。

因此,使用指向 const 的指针是一个更可行的选择。

于 2013-07-08T16:33:11.360 回答