任何人都可以告訴我如何訪問另一個函數中聲明和定義的函數中的變量。例如如何訪問在另一個函數中的函數中定義和聲明的變量?
void function1()
{
string abc;
}
void function2()
{
I want to access abc here.
}
如何做到這一點? 我知道使用參數我們可以做,但有沒有其他方式?
任何人都可以告訴我如何訪問另一個函數中聲明和定義的函數中的變量。例如如何訪問在另一個函數中的函數中定義和聲明的變量?
void function1()
{
string abc;
}
void function2()
{
I want to access abc here.
}
如何做到這一點? 我知道使用參數我們可以做,但有沒有其他方式?
C++的方式是按引用傳遞abc
給你的函數:
void function1()
{
std::string abc;
function2(abc);
}
void function2(std::string &passed)
{
passed = "new string";
}
您還可以通過你的字符串作爲指針,取消對它的引用在函數2。這是更做事的C風格的方式,而不是安全的(例如,一個空指針可以傳遞,並且沒有良好的錯誤檢查會引起未定義的行爲或崩潰。
void function1()
{
std::string abc;
function2(&abc);
}
void function2(std::string *passed)
{
*passed = "new string";
}
謝謝我會盡力讓你知道:D – 2012-08-02 18:59:04
這工作! :D 謝謝! – 2012-08-03 07:27:48
絕對沒有辦法。塊的變量只能從該塊直接訪問。
指向對象的指針/引用可以傳遞到從此塊中調用的函數作爲參數。
這是當然,錯誤。範圍設定將對象的名稱限制爲在另一個塊中可見。它不限制對象的訪問。訪問可以通過傳遞參考等方式獲得。 – 2012-08-02 18:21:44
@EricPostpischil但引用什麼?範圍定義也定義了對象的生命週期,除非它是靜態的或動態分配的。此外,OP指定了「無參數」。 – juanchopanza 2012-08-02 18:25:46
將參考放入全局變量中。將引用傳遞給其他函數。將引用傳遞給使其他函數可訪問的函數。以指針作爲參數,並將引用存儲在指向的位置。等。 – 2012-08-02 18:30:06
如果在功能1要在函數2使用一個變量,那麼你必須:。
如果你的函數2是從功能1叫,然後就可以只是將它作爲參數傳遞給function2。
void function1()
{
std::string abc;
function2(abc);
}
void function2(std::string &passed)
{
// function1::abc is now aliased as passed and available for general usage.
cout << passed << " is from function1.";
}
如果FUNCTION1沒有調用函數2,但都被稱爲功能3,則有功能3聲明變量,並傳遞到兩個功能1和功能2作爲參數。
void parentFunction()
{
std::string abc;
function1(abc);
function2(abc);
}
void function1(std::string &passed)
{
// Parent function's variable abc is now aliased as passed and available for general usage.
cout << passed << " is from parent function.";
}
void function2(std::string &passed)
{
// Parent function's variable abc is now aliased as passed and available for general usage.
cout << passed << " is from parent function.";
}
最後,如果既沒有功能1也不函數2從相互調用,也沒有從代碼中的相同的功能,則聲明爲全局要共享的變量,功能1和功能2將能夠直接使用它。
std::string global_abc;
void function1()
{
cout << global_abc << " is available everywhere.";
}
void function2()
{
cout << global_abc << " is available everywhere.";
}
我建議你閱讀範圍界定,你會明白爲什麼這是不可能的。 – 2012-08-02 18:19:50
這樣做毫無意義:每次調用'function1'都有一個'abc'實例。在for(int i = 0; i <100; ++ i){function1(); }'你想要'abc'的一百個實例中的哪一個? – 2012-08-02 18:21:00
你知道靜態成員嗎? – phadaphunk 2012-08-02 18:29:25