仅在C中返回变量的函数

时间:2014-12-14 18:11:08

标签: c

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

2 个答案:

答案 0 :(得分:2)

我的C生锈了(在17年内没有写过任何内容),但您可能会使用struct(或typedef' d struct)函数返回:

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);

(你不需要返回类型等等,但它非常方便,所以你可以指定你正在释放的指针,所以你没有悬空指针释放内存。)

答案 1 :(得分:0)

只是您需求的一个简单示例。

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;
}

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;
}