int variable;
和int variable = 0;
有什么区别?我见过它们都使用过,并且,如果我没记错的话,是由同一作者在同一文件中使用的。
据我所知,它们是相同的:
$ cat integers.c
#include <stdio.h>
int main(void) {
int patty;
int tim = 0;
printf("Patty: %d\nTim: %d\n", patty, tim);
}
$ gcc integers.c -o integers
$ ./integers
Patty: 0
Tim: 0
这也适用于其他变量类型:char *variable;
和char *variable = NULL;
有什么区别?
答案 0 :(得分:4)
据我所知,它们是相同的
不,他们不是。访问patty
是未定义的行为,因为它没有初始化。您刚好得到相同的结果。如果patty
是全局的,那么它将被默认初始化(0
)。
答案 1 :(得分:3)
变量patty
和tim
的存储期限都是自动的。
变量patty
和tim
的存储期限是相同的,但是当您尝试访问它们时,结果可能会有所不同,因为其中一个已初始化而另一个未初始化,并且使用自动存储期限来访问未初始化的对象是undefined behavior:
int patty; //Uninitialized
int tim = 0; //Initialized
来自C标准#6.7.9p10 [初始化]
如果未自动初始化具有自动存储期限的对象,则其值不确定。
根据C标准#J.2 [未定义的行为]
具有不确定存储期限的对象的值在不确定时使用(6.2.4、6.7.9、6.8)。
未定义的行为包括它可能执行不正确(崩溃或无提示地生成不正确的结果),或者可能偶然地完全按照程序员的意图执行。
尽管您在输出中获得的patty
和tim
变量的值相同,但是肯定不相同。
$ ./integers
Patty: 0 <----- indeterminate value
Tim: 0 <----- value that tim initialized with
答案 2 :(得分:1)
实际上它们并不相同,未分配的变量可能具有任何垃圾值,但分配的变量具有定义的值 例如 诠释 int j = 6; 如果打印这些,则h不会总是为0,但j变量肯定会为6