2013-03-16 116 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; 
} 
相關問題