在C语言中只返回变量的函数

在C语言中只返回变量的函数,c,C,我想调用一个函数来初始化一个数组和一个整数变量,并将它们从函数发送回主程序。我甚至不想在主程序中声明这些变量,但是如果我必须这样做,那么就不需要在主程序中初始化它们。这可能吗?我的C已经生锈了(大约17年没有写过任何东西了),但是你可能会用函数返回的结构(或者类型定义'd结构)来实现: struct foo { int i; int * a; }; struct foo * myFunction() { struct foo * pf; pf = malloc(

我想调用一个函数来初始化一个数组和一个整数变量,并将它们从函数发送回主程序。我甚至不想在主程序中声明这些变量,但是如果我必须这样做,那么就不需要在主程序中初始化它们。这可能吗?

我的C已经生锈了(大约17年没有写过任何东西了),但是你可能会用函数返回的
结构(或者
类型定义
'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;
}