关于局部变量和全局变量的一个问题

时间:2022-04-16 10:29:18
大概的代码如下:

int a;
int main()
{
    :
   f2();
   :
   f1();
}
void f1()
{
     auto int b;
     :
    f2();
     :
}
void f2()
{
    :
    static int c;
      :
}


我的问题是auto int b 在f1中定义的这个变量是否对f1函数中 被调用函数f2();可见?在调用f2()时,f2()可否对f1的变量b进行调用?

9 个解决方案

#1


f1(),f2(),没有参数,不能传递
如果有参数,可以传递
另外
一个生命周期在语句组内部, auto int b;
一个在整程序生存期内

#2


b在f2中不可见。
函数是平等的,不是说调用谁谁就是下一级函数,就可以使用上一级的局部变量。

#3


得使用全局变量才行……

#4


如果传参的话可以

#5


如果 b 是个传递到 f2() 中的参数,那就可见,如果没有传递到 f2() 中,那就不可见

#6


不要把JS的思想代到C++中来了.

每个变量是有生命周期和作用域的.

auto int b; 这个是函数f1中的变量, 作用域限定在f1内,  f2中是不可见的.
同理, f1中也对f2中的c不可见

#7


这个帖子也纠正了我认识上的误区!

#8


f2 已经分家出去了,单过了再用老头的钱说不过去的。 关于局部变量和全局变量的一个问题

#9


闭包是可以的,但需要支持C99
#include<stdio.h>
int main()
{
    int a=1;
    void f()
    {
        a=2;
    }
    f();
    printf("%d\n",a);
    return 0;
}
// Output:
// 2

#1


f1(),f2(),没有参数,不能传递
如果有参数,可以传递
另外
一个生命周期在语句组内部, auto int b;
一个在整程序生存期内

#2


b在f2中不可见。
函数是平等的,不是说调用谁谁就是下一级函数,就可以使用上一级的局部变量。

#3


得使用全局变量才行……

#4


如果传参的话可以

#5


如果 b 是个传递到 f2() 中的参数,那就可见,如果没有传递到 f2() 中,那就不可见

#6


不要把JS的思想代到C++中来了.

每个变量是有生命周期和作用域的.

auto int b; 这个是函数f1中的变量, 作用域限定在f1内,  f2中是不可见的.
同理, f1中也对f2中的c不可见

#7


这个帖子也纠正了我认识上的误区!

#8


f2 已经分家出去了,单过了再用老头的钱说不过去的。 关于局部变量和全局变量的一个问题

#9


闭包是可以的,但需要支持C99
#include<stdio.h>
int main()
{
    int a=1;
    void f()
    {
        a=2;
    }
    f();
    printf("%d\n",a);
    return 0;
}
// Output:
// 2