C 为什么我不能将赋值分解为两个不同的语句?
当语句C 为什么我不能将赋值分解为两个不同的语句?,c,pointers,null,initialization,variable-assignment,C,Pointers,Null,Initialization,Variable Assignment,当语句 sample.c:11:1: error: conflicting types for 'root' sample.c: 10:7 note: previous declaration of 'root' was here node *root; ^ 在main函数中声明 原因可能是什么?在第一种情况下 root = NULL; 是一个while声明。这在全局范围中是明确允许的 另一方面, node *root = NULL; 是一个声明,是一个,后者是一个要执
sample.c:11:1: error: conflicting types for 'root'
sample.c: 10:7 note: previous declaration of 'root' was here
node *root;
^
在main函数中声明
原因可能是什么?在第一种情况下
root = NULL;
是一个while声明。这在全局范围中是明确允许的
另一方面,
node *root = NULL;
是一个声明,是一个,后者是一个要执行的语句,它必须在某个函数范围内。它不能位于全局范围内
因此,在您的情况下,root
是一个全局变量,可以从main()
完全访问,并且赋值语句在那里也是合法的。没有投诉。在第一个案例中
root = NULL;
是一个while声明。这在全局范围中是明确允许的
另一方面,
node *root = NULL;
是一个声明,是一个,后者是一个要执行的语句,它必须在某个函数范围内。它不能位于全局范围内
因此,在您的情况下,root
是一个全局变量,可以从main()
完全访问,并且赋值语句在那里也是合法的。无需抱怨。当变量不是初始化的一部分时,您不能只在函数外部赋值。请注意,所有全局变量都是零初始化的,没有必要像您那样将其重新初始化为零。您不能只在函数外部赋值变量,当它不是初始化的一部分时。请注意,所有全局变量都是零初始化的,没有必要像您这样将它们重新初始化为零。
node *root;
root = NULL;