我正在读一本书,名为“编程的目标-C”,第六版,斯蒂芬G.科尚。它在第144页有以下声明,使我感到困惑:
作为基本C数据类型的局部变量没有默认值,因此必须在使用它们之前将它们设置为某个值。
但是,当我有以下代码时,它仍然工作,并显示0:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
int number;
NSLog(@"%i", number);
return 0;
}int不是一个基本的C数据类型吗?
发布于 2014-05-01 02:59:16
"Basic数据类型没有缺省初始值“,这并不意味着如果不初始化它们,它们就不会有一个值,只是你不会事先知道这个值是什么。
在您的例子中,这个number恰好有一个零,但是它可能有其他的值。
发布于 2014-05-01 03:19:01
在堆栈上分配局部变量。局部变量的初始值没有保证值。相反,局部变量的值完全取决于使用堆栈的特定区域的前一个函数所留下的任意值。
对于main函数,局部变量的初始值可能看起来是可预测的,因为main是第一个运行和使用堆栈区域的函数。然而,编译器不费吹灰之力,语言规范也不需要保证局部变量的初始值。
总之,始终在使用局部变量之前显式初始化它们。
https://stackoverflow.com/questions/23401353
复制相似问题