在C语言中只返回变量的函数
我想调用一个函数来初始化一个数组和一个整数变量,并将它们从函数发送回主程序。我甚至不想在主程序中声明这些变量,但是如果我必须这样做,那么就不需要在主程序中初始化它们。这可能吗?我的C已经生锈了(大约17年没有写过任何东西了),但是你可能会用函数返回的在C语言中只返回变量的函数,c,C,我想调用一个函数来初始化一个数组和一个整数变量,并将它们从函数发送回主程序。我甚至不想在主程序中声明这些变量,但是如果我必须这样做,那么就不需要在主程序中初始化它们。这可能吗?我的C已经生锈了(大约17年没有写过任何东西了),但是你可能会用函数返回的结构(或者类型定义'd结构)来实现: struct foo { int i; int * a; }; struct foo * myFunction() { struct foo * pf; pf = malloc(
结构(或者类型定义'd结构)来实现:
struct foo {
int i;
int * a;
};
struct foo * myFunction() {
struct foo * pf;
pf = malloc(sizeof(*pf));
pf->i = 0; // Or whatever value it should have
pf->a = malloc(100 * sizeof(*pf->a)); // Or whatever size it should have
// ...fill in pf->a here...
return pf;
}
…或者类似的东西。用法:
struct foo * pf = myFunction();
您可能还需要一个函数来释放它,例如:
struct foo * releaseFoo(struct foo * pf) {
if (pf != NULL) {
if (pf->a != NULL) {
free(pf->a);
pf->a = NULL;
}
free(pf);
}
return NULL;
}
用法:
pf = releaseFoo(pf);
(您不需要返回类型之类的,但拥有它确实很方便,这样您就可以将其分配给正在释放的指针,这样您就不会有指向已释放内存的悬空指针。)这只是一个简单的示例
void func(int *a)
{
int i;
for(i=0;i<10;i++)
a[i] = i;
return;
}
int main()
{
int a[10],i;
func(a);
for(i=0;i<10;i++)
printf("%d",a[i]);
return 0;
}
void func(int*a)
{
int i;
对于(i=0;iDepends,如果您对数组位于堆或堆栈上感到满意。您至少必须在主程序中声明指针,函数才能返回值。“…我想调用一个函数来初始化数组和整数变量…”因此,我使用struct.@T.J.Crowder是的,我给出了两种实现方法。在堆栈和堆上。同样,intger也可以initialized@Gopi谢谢。只是一个问题:我可以用同样的函数来返回整数吗?我不明白你对T.J.的回答。@Eran:那是因为他对我的回答没有解决我所关心的问题提出。谢谢。有几件事我不清楚-myFunction不能是空的吗?你以前写“struct foo*”是什么意思?你必须在“struct foo*pf”行中写*
?@Eran:如果你想让它返回一些东西,它不能是空的。它可以被重写来接受一个参数,比如说struct foo**ppf
,然后它会填充这个参数(你可以通过struct foo*pf;myFunction(&pf);
来调用它,但我看不出这能给你带来任何好处。第二个问题没有通过(在可能有尖括号的东西周围使用反勾号)。@Eran:我在上面评论之前没有过。是的,您需要*
(和malloc
),因为否则结构将被分配到堆栈上,当函数返回时,堆栈空间将被回收,您不能再使用指针。
int *func()
{
int i;
int *p = malloc(sizeof(int) *10);
for(i=0;i<10;i++)
p[i] = i;
return p;
}
int main()
{
int i;
int *a = func();
for(i=0;i<10;i++)
printf("%d",a[i]);
return 0;
}