【发布时间】:2013-11-15 18:27:21
【问题描述】:
我正在尝试将嵌套结构的 C 函数更改为对指针进行操作,而不是传递和复制实际上相当大的结构。
这是我想要传递结构的简化版本....
struct InnerStruct
{
int int1;
int int2;
};
struct OuterStruct
{
struct innerStruct inner1;
int outerResult;
};
void main (void)
{
struct OuterStruct outer1;
outer1 = get_outer ();
}
struct OuterStruct get_outer (void)
{
struct OuterStruct thisOuter;
thisOuter.inner1 = get_inner (void);
thisOuter.outerResult = get_result (thisOuter.inner1);
return thisOuter;
}
struct InnerStruct get_inner (void)
{
struct InnerStruct thisInnner;
thisInner.int1 = 1;
thisInner.int2 = 2;
return thisInner;
}
int get_result (struct InnerStruct thisInner)
{
int thisResult;
thisResult = thisInner.int1 + thisInner.int2;
return thisResult;
}
但实际上结构相当大,这是一个频繁的操作,所以我宁愿传递指针。只是不确定语法如何适用于这样的嵌套结构。这是我的尝试....
struct InnerStruct
{
int int1;
int int2;
};
struct OuterStruct
{
struct innerStruct inner1;
int outerResult;
};
void main (void)
{
struct OuterStruct outer1;
get_outer (&outer1);
}
void get_outer (struct OuterStruct *thisOuter)
{
get_inner (&(thisOuter->inner1));
thisOuter->outerResult = get_result (&(thisOuter->inner1));
}
void get_inner (struct InnerStruct *thisInner)
{
thisInner->int1 = 1;
thisInner->int2 = 2;
}
int get_result (struct OuterStruct *thisInner)
{
int thisResult;
thisResult = thisInner->int1 + thisInner->int2;
return thisResult;
}
【问题讨论】:
-
乍一看,这似乎是正确的,除了在
OuterStruct的定义中应该拼写为InnerStruct的innerStruct。究竟是什么问题? -
真的是我写了这个简化的例子来理解我想要做什么。实际的代码又长又复杂,很容易迷失在其中。我发布这篇文章的主要原因是我希望人们会跳出来说不要那样做,你做错了!所以感谢您查看它,我知道我本可以继续尝试编译它,但正在获得最佳实践建议。
-
真的,我没有找到让我失望的东西(因为玩过它后我意识到没有必要)但是假设我希望 get_result 函数在外部指针...我不确定说“thisResult = thisOuter->inner1->int1 + thisOuter->inner1->int2;”是否有意义但是阅读了解除引用快捷方式的工作原理后,我意识到在这种情况下我应该说'thisResult = thisOuter->inner1.int1 + thisOuter->inner1.int2;'
标签: c function pointers struct arguments