說我有一起在那裏我們有一個初始化函數初始化一個(或多個)變量,然後另一功能的如何使一個函數變量可見的其他功能
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