我需要在函数内部创建一个结构(使用malloc动态) 然后我需要能够将它发送到我的主要,并在那里使用它。 我创建它没有任何问题,我只需要帮助将它发送到我的主要部分,而且我也不确定如何在它到达之后访问它。
struct retValue * fn() {
struct retValue
{
int number;
};
struct retValue* st = malloc(sizeof(*st));
return(???);
}
这是我到目前为止的代码。
感谢您的帮助。如果你需要澄清的话,请告诉我。
编辑:
好的,需要澄清一些。
我想要实现的是能够通过函数将结构传递给我的main。在函数内部,我必须声明变量,并为它们赋值。然后在主要我必须将结构的每个变量打印到屏幕上。不能使用全局变量(因此我假设没有全局结构)。
希望澄清事情。
编辑2:
我已经弄清楚了我的问题。对于那些感兴趣的人,我需要首先在我的函数之外使用结构原型。然后我可以通过st然后正确访问它。 感谢所有人,并为可怜的措辞感到抱歉。
答案 0 :(得分:8)
// make the structure def global so that main() and fun() know about it.
struct retValue {
int number;
};
// function fn returns a pointer to the structure retValue
struct retValue * fn() {
struct retValue* st = malloc(sizeof(*st));
// return the pointer to the newly allocated structure.
return(st);
}
int main() {
// call fn() to create a new structure dynamically.
struct retValue *st = fn();
}
答案 1 :(得分:4)
您将获得数百个问题的答案。 :)
您可以直接返回指针。例如。 return st
,您的主要功能将能够像st->number
中那样访问结构的成员。确保主free
完成后指针。
这不一定是一个很好的设计模式。你的被调用者(fn)正在分配内存,但你的调用者(主)需要处理后果。您也可以使用main来分配内存(使用malloc或直接在堆栈上)并传入指针以供fn使用。然后malloc / free发生在同一个地方。否则,您希望确保将您的fn函数命名为allocateMyStructure
之类的清楚,因此很明显需要释放返回。
P.S。我不确定在函数内部定义结构的规则,但是你不应该在这里做。在main和你的fn函数之上声明struct retValue,这样它们就可以“看到”声明的类型。
答案 2 :(得分:1)
有一件事我想指出......因为结构是函数的本地结构,是否有一个完全匹配的全局结构,否则你可能遇到麻烦,main()
如何知道什么是在那个结构?你能说清楚吗?
编辑:我的回答似乎证实了我的想法。
struct retValue { int number; }; int main(int argc, char **argv){ struct retValue *ptr; ptr = fn(); /* do what you have to do... */ .... return 0; } struct retValue * fn() { struct retValue* st = malloc(sizeof *st); /* do you work on the structure */ st->number = 5; return st; }
顺便提一下,今天早些时候有人发布了this。
希望这有帮助, 最好的祝福, 汤姆。
答案 3 :(得分:0)
只是:return st;
答案 4 :(得分:0)
请在公共头文件中声明结构并将其包含在源文件中,然后从当前函数返回st。这应该有用。
答案 5 :(得分:0)
struct retValue { int number; };
int main(...) {
struct retValue *myval;
myval = fn();
}
struct retValue *fn() {
struct retValue* st = malloc(sizeof(*st));
return st;
}