C语言局部变量问题?局部变量按说当再次执行时是可以回初值的,可是我在C51编译器下试验,却发现如果不在定义时不给它赋初值,哪它当再次执行时是不会回初值的,这是怎么回事?

题目
C语言局部变量问题?

局部变量按说当再次执行时是可以回初值的,可是我在C51编译器下试验,却发现如果不在定义时不给它赋初值,哪它当再次执行时是不会回初值的,这是怎么回事?


相似考题
参考答案和解析
您好!
Java中的类的static变量相当于C语言里的全局(extern或者static)变量,放在全局数据区,被操作系统初始化成全0;而因为对象都由new操作生成,所以对象的成员变量放置在(相当于)C中由calloc分配的堆空间中,calloc将其全部初始化为0。

而局部变量放置在栈中,栈空间是经常被复用的,比如先调用A函数:A()等A执行完了之后会释放所用的栈空间,然后调用B函数:B(),B函数占用的栈空间就会是原来A占用的那片空间,而那片空间是A函数读写了很多次的。如果想要局部变量默认初始化为0的话,就必须要么一个函数申请栈空间后就将其memset成0,要么函数释放栈空间时将其memset成0,无论是什么情况,都会增加不必要的开销。所以干脆就放任局部变量的值未定义了

局部变量通常你自己都会给它去赋值的,因为你的代码告诉你,你需要去给它赋值才能达到你的要求;

成员变量如果你一开始定义了,你怎么给它赋值?我想也没多少人能一开始就能肯定自己用到什么值吧。
所以java就只对成员变量默认初始化了,
在局部变量里,你定义了量就一定要用到它(那么赋值就少不了),如果你忘了赋值,那么就出错了,方便提醒你,而且你写的程序大了,局部变量多了,找问题就有点麻烦了。
而对于这个问题,成员变量就不会有多少了
int f()
{
    int a = 5;
    return 1;
}
当执行一次结束后,变量a也就释放了,消失了,当再次执行时声明的a已经不是上次的a了,已经是再次声明的一个变量了,如果在换成这个static int a = 5;那么执行结束后,a不会释放,下次执行时还是这个a,且值是保存的,而不是重新声明一个.
更多“C语言局部变量问题? ”相关问题
  • 第1题:

    在Transact SQL语言中,局部变量的开始标记为____,全局变量的开始标记为____


    参考答案@ @@
      在名称为商品库的数据库中包含有商品表1和商品表2,它们的定义分别为:
      商品表1(商品代号char (8),分类名char (8),单价float,数量int)
      商品表2(商品代号char (8),产地char (6),品牌char (6))
      在名称为教学库的数据库中包含有学生、课程和选课三个表,它们的定义分别为:
      学生(学生号char (7),姓名。 har (6),性别char (2),出生日期datetime,
      专业char (10),年级int)
      课程(课程号char (4),课程名char (10),课程学分int)
      选课(学生号char (7),课程号char (4),成绩int)

  • 第2题:

    C语言中,未设定存储类别的局部变量的隐含存储类别是()

    A.auto

    B.static

    C.extern

    D.register


    auto

  • 第3题:

    C语言中,凡未指定存储类别的局部变量的隐含存储类别是

    A.auto

    B.static

    C.extern

    D.register


    auto

  • 第4题:

    C++语言提供的“::”运算符的作用是在同名局部变量的作用域中访问【 】。


    正确答案:全局变量
    全局变量 解析:C++语言提供的“::”运算符的作用是在同名局部变量的作用域中访问全局变量。

  • 第5题:

    C语言中,凡未指定存储类别的局部变量的隐含存储类别是().

    A.auto

    B.static

    C.extern

    D.register


    auto