假设我有两个简单的结构:
struct Point{
double x;
double y;
};
struct Err{
double xx;
double xy;
double yy;
};
我有两种选择来定义复杂的结构:
选项1-直接
struct Measure {
Point P;
Err E;
};
struct State {
Measure Pos;
Measure Vel;
Measure Acc;
};
选项2-指针
struct PMeasure {
Point *P;
Err *E;
};
struct PState {
Measure *Pos;
Measure *Vel;
Measure *Acc;
};
这两个选项的优缺点是什么?
答案 0 :(得分:3)
在两种情况下,您需要使用指针以及C中的malloc
,realloc
,free
:
您的对象看起来不需要指针。您可能最终需要一个指向State
数组开始的指针。
答案 1 :(得分:3)
选项1
选项2
因此,对于简单的东西,我会选择选项1。但是对于更复杂的东西,请使用选项2,但是将所有初始化,克隆和销毁都包装到特定的函数中。
答案 2 :(得分:2)
这取决于您要分配实际内存的位置。选项1与结构一起分配内存。选项2假定内存已分配到其他位置。
通常情况下,选项1可能最有用。如果您是初学者,则可以在此处停止阅读并选择选项1。
选项2可能有其特殊用途,例如,如果您希望构建诸如查找表之类的内容,或者出于某种原因必须使用所有对象的堆分配(如果它们是例如太大而无法放在堆栈上。
答案 3 :(得分:1)
基本上,在创建指针时,必须分配空间并将该空间的地址保存到指针中。你要写什么在这里很重要。您可以静态分配,也可以动态分配。每当分配空间时,就在不再需要它们时必须释放它们。实际上取决于您的设计选择哪个。
答案 4 :(得分:1)
如果您不明白为什么第二个选项可能导致内存问题,那么请坚持使用选项1。指针非常有用,并且可以使用C语言中的动态内存分配或直接访问其他指针。变量。但是:
如果您不严格遵守上述规则,则您的程序将出现内存问题...