说我有一起在那里我们有一个初始化函数初始化一个(或多个)变量,然后另一功能的如何使一个函数变量可见的其他功能
void init(void){
int foo = 0;
}
void useFoo(void){
foo++;
}
void main{
init();
useFoo();
}
行的东西(或,可能是多个函数)必须使用该变量,我该如何使“int foo”对其他函数可见?
说我有一起在那里我们有一个初始化函数初始化一个(或多个)变量,然后另一功能的如何使一个函数变量可见的其他功能
void init(void){
int foo = 0;
}
void useFoo(void){
foo++;
}
void main{
init();
useFoo();
}
行的东西(或,可能是多个函数)必须使用该变量,我该如何使“int foo”对其他函数可见?
你可以把它在全球范围内可见:
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);
或者你可以使用线程本地存储,文件,其他媒体,但我相信你不想那样:)
简短的回答是“你不能”(至少不是这样)。 init
中的变量foo
在条目init
处创建,然后在从init
返回时销毁。它不再存在通过useFoo
的电话。
您需要变量具有更长的“存储时间”(程序级生存期)。你可以通过使它具有“静态持续时间”(通过关键字static
并将它移动到函数之外 - 尽管实际上移出它足够),在这种情况下只有一次实例(在许多其他实例中是“单例”)语言的分类法)。或者,您可以使用malloc
创建一个数据结构,并给出数据“分配的持续时间”:它从malloc
的点持续到稍后的free
(我们现在将忽略realloc
:-))。
分配持续时间的方法更麻烦但更灵活。
的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;
}
这将是什么*函数参数*的目的,或者我完全飞离雷达?该变量属于'main()';不是'init()' – WhozCraig 2013-03-16 19:30:35