Objective-C中的int是否自动初始化为0?
我正在读一本名叫《Objective-C编程》的书,第六版,由Stephen G.Kochan编写。它在144页上的陈述让我感到困惑: 基本C数据类型的局部变量没有默认的初始值,所以在使用它们之前必须将它们设置为某个值 但是,当我有以下代码时,它仍然有效,并显示0:Objective-C中的int是否自动初始化为0?,objective-c,c,int,local-variables,variable-initialization,Objective C,C,Int,Local Variables,Variable Initialization,我正在读一本名叫《Objective-C编程》的书,第六版,由Stephen G.Kochan编写。它在144页上的陈述让我感到困惑: 基本C数据类型的局部变量没有默认的初始值,所以在使用它们之前必须将它们设置为某个值 但是,当我有以下代码时,它仍然有效,并显示0: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { int number; NSLog(@"%i",
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
int number;
NSLog(@"%i", number);
return 0;
}
#导入
int main(int argc,const char*argv[]
{
整数;
NSLog(@“%i”,编号);
返回0;
}
int
不是一种基本的C数据类型吗?基本的C数据类型没有默认的初始值,这并不意味着如果不初始化它们,它们就没有值,只是你事先不知道该值是什么
在您的例子中,
number
恰好有一个零,但它可能有其他值。局部变量在堆栈上分配。局部变量的初始值没有保证值。相反,局部变量的值完全取决于使用堆栈特定区域的前一个函数留下的任何随机值
对于main
函数,局部变量的初始值似乎是可预测的,因为main
是第一个运行和使用堆栈区域的函数。然而,编译器没有做出任何努力,语言规范也没有要求保证局部变量的初始值
总之,在使用局部变量之前,务必显式初始化它们。密切相关:只要您在调试器中运行代码,它就可以工作。调试器对应用程序内存使用0初始化局部变量起到了一些神奇的作用:所以基本上它是随机的?我应该总是初始化,不能指望它总是0?我在某个地方读到,这取决于特定时间内存位置中的内容。@user3451821是的,是的。