为什么静态变量被赋值为0?静态和外部变量赋值为0为什么?
0
A
回答
2
因为标准要求这是真的。
C99标准§6.7.8.10说:
如果具有自动存储持续时间的对象没有被明确初始化,它的值是不确定的。如果具有静态存储持续时间的对象未被明确初始化,则:
- 如果它具有指针类型,则将其初始化为空指针;
- 如果它有算术类型,它被初始化为(正或无符号)零;
- 如果它是一个聚合,每个成员根据这些规则初始化(递归);
- 如果它是一个联合,根据这些规则初始化(递归)第一个命名成员。
2
初始化为0是有意义的 - 它使事情更具可预测性。这个问题应该是“为什么堆栈变量不是初始化?”
对此的回答可能是性能 - 初始化堆栈变量需要在每次输入函数时完成,如果实际上不需要初始化,可能会浪费时间。加载程序时会初始化静态变量,所以不会花费太多。
1
因为它们是唯一可以初始化而不会导致运行时性能损失的变量存储类。
自动存储类变量(默认值)不会被初始化,因为它们可能不会被使用。在之内的静态变量一个函数不能保证被初始化,直到函数被第一次调用。
零是有几个原因明智一般默认初始化器:它产生一个空字符串字符数组,它启动一个数组索引数,并产生一个NULL指针等
个人而言,我总是明确初始化静态甚至归零。这部分是纪录片,换句话说,“我真的想要零,不要改变它”。
相关问题
- 1. 为什么要为变量“let”赋值?
- 2. 静态和外部变量
- 3. Javascript,变量未被赋值...为什么?
- 4. Python:为什么类变量被赋值?
- 5. 为什么最终的静态变量不能在实例块中赋值?
- 6. 为什么第二个静态变量赋值不是第一个生效的?
- 7. 为什么静态变量不好?
- 8. 全局静态变量在本地函数中突然变为0 - 为什么?
- 9. 将值赋给静态变量的正确方法是什么?
- 10. 为什么在类方法中初始赋值为零只发生一次局部静态变量?
- 11. 为变量赋值
- 12. 为什么变量应声明为静态和最终
- 13. 为什么我不能为测量<UnitMass>变量赋值?
- 14. 如何为R中的动态变量名赋值0
- 15. 静态成员变量赋值
- 16. 给静态变量赋值时出错
- 17. 静态变量和静态变量的区别是什么?
- 18. 为什么C中的静态局部变量重载?
- 19. 为什么变量初始化为0?
- 20. 为什么在赋值时执行静态属性的闭包?
- 21. 意外静态变量地址行为
- 22. 为什么这个布尔变量被赋值为真?
- 23. 为什么变量赋值将空格替换为空格
- 24. 外部静态变量的用途是什么?
- 25. 静态变量将其值自己重置为0显然
- 26. 为什么静态类不能有非静态方法和变量?
- 27. 为什么我会收到“非静态变量和静态上下文”错误?
- 28. 声明静态变量时的输出是什么?为什么?
- 29. Freemarker为变量赋值
- 30. 为共享变量赋值?
Kevin Ballard请你详细说明你的答案 – 2013-02-12 07:40:25
谢谢Kevin Ballard – 2013-02-12 07:42:35