c++ 如何在一个函数中访问另一个函数中定义和声明的变量?

3phpmpom  于 2023-05-24  发布在  其他
关注(0)|答案(4)|浏览(359)

谁能告诉我如何在一个函数中访问另一个函数中声明和定义的变量。
例如

void function1()
{
   string abc;
}

void function2()
{
   // I want to access abc here.
}

除了使用参数之外,我还能如何实现这一点呢?

igetnqfo

igetnqfo1#

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";
}
ukdjmx9f

ukdjmx9f2#

让它全球化,那么双方都可以操纵它。

string abc;

void function1(){
    abc = "blah";
} 

void function2(){
    abc = "hello";
}
pobjuy32

pobjuy323#

如果你想在函数2中使用函数1中的一个变量,那么你必须:
1.直接传过去
1.有一个更高范围的函数,该函数调用声明变量并传递它,或者
1.声明它是全局的,然后所有函数都可以访问它
如果你的function2是从function1调用的,那么你可以把它作为参数传递给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没有调用function2,但两者都被function3调用,那么让function3声明变量并将其作为参数传递给function1和function2。

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.";   
}

最后,如果function1和function2都没有被对方调用,也没有被代码中的同一个函数调用,那么将变量声明为全局变量,function1和function2就可以直接使用它。

std::string global_abc;  
void function1( )   
{   
   cout << global_abc << " is available everywhere.";   
}   
void function2( )   
{   
   cout << global_abc << " is available everywhere.";   
}
gopyfrb3

gopyfrb34#

绝对不可能。该块的变量只能从该块直接访问。
指向对象的指针/引用可以被传递到从该块作为参数调用的函数中。

相关问题