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