2013-03-16 112 views
-1

说我有一起在那里我们有一个初始化函数初始化一个(或多个)变量,然后另一功能的如何使一个函数变量可见的其他功能

void init(void){ 
    int foo = 0; 
} 
void useFoo(void){ 
    foo++; 
} 
void main{ 
    init(); 
    useFoo(); 
} 

行的东西(或,可能是多个函数)必须使用该变量,我该如何使“int foo”对其他函数可见?

+0

这将是什么*函数参数*的目的,或者我完全飞离雷达?该变量属于'main()';不是'init()' – WhozCraig 2013-03-16 19:30:35

回答

2

你可以把它在全球范围内可见:

int foo; 

void init() 
{ 
    foo = 0; 
} 

void useFoo() 
{ 
    ++foo; 
} 

您也可以传递一个指针变量需要的地方:

void init(int *foo) 
{ 
    *foo = 0; 
} 

void useFoo(int *foo) 
{ 
    (*foo)++; 
} 

... 
int foo; 
init(&foo); 
useFoo(&foo); 

或者你可以使用线程本地存储,文件,其他媒体,但我相信你不想那样:)

1

简短的回答是“你不能”(至少不是这样)。 init中的变量foo在条目init处创建,然后在从init返回时销毁。它不再存在通过useFoo的电话。

您需要变量具有更长的“存储时间”(程序级生存期)。你可以通过使它具有“静态持续时间”(通过关键字static并将它移动到函数之外 - 尽管实际上移出它足够),在这种情况下只有一次实例(在许多其他实例中是“单例”)语言的分类法)。或者,您可以使用malloc创建一个数据结构,并给出数据“分配的持续时间”:它从malloc的点持续到稍后的free(我们现在将忽略realloc :-))。

分配持续时间的方法更麻烦但更灵活。

0

的simplies方式是使它的全局变量:

int foo; 
void init(void) { 
    foo = 0; 
} 
void useFoo(void) { 
    foo++; 
} 
void main(void) { 
    init(); 
    useFoo(); 
} 

另一种方法是通过使用指针:

#include <stdio.h> 

void init(int *foo) { 
    *foo = 0; 
} 
void useFoo(int *foo) { 
    (*foo)++; 
} 
void main(void) { 
    int foo; 
    init(&foo); 
    useFoo(&foo); 
    useFoo(&foo); 
    useFoo(&foo); 
    printf("%d\n", foo); 
} 

,最后一个被传递它作为一个参考(使用CPP时,而不是C):

#include <stdio.h> 

void init(int &foo) { 
    foo = 0; 
} 
void useFoo(int &foo) { 
    foo++; 
} 
int main(int argc, char** argv) { 
    int foo; 
    init(foo); 
    useFoo(foo); 
    useFoo(foo); 
    useFoo(foo); 
    printf("%d\n", foo); 
    return 0; 
} 
相关问题