为什么我不能将值赋值分成两个不同的语句?

时间:2016-09-28 15:56:29

标签: c pointers null initialization variable-assignment

   #inlude <stdio.h>
   typedef struct node
   {
     int data, height, count;
     struct node *left, *right, *father;
   }node;
   node *root = NULL;
   void main(){
   //some code here
   }

上面的代码没有错误,但是

  #inlude <stdio.h>
   typedef struct node
   {
     int data, height, count;
     struct node *left, *right, *father;
   }node;
   node *root;
   root = NULL;
   void main(){
   //some code here
   }

这会产生以下错误:

sample.c:11:1: error: conflicting types for 'root' 
sample.c: 10:7 note: previous declaration of 'root' was here 
node *root; 
      ^

声明

时不会复制上述错误
root = NULL;

main function

范围内声明

可能是什么原因?

1 个答案:

答案 0 :(得分:7)

在第一种情况下,

 node *root = NULL;
申报时

initialization 。在全球范围内明确允许这样做。

另一方面,

node *root;
root = NULL;

是声明 assignment ,后者是要执行的声明,它必须在某个函数范围内。它不能驻留在全球范围内。

因此,在您的情况下,root是一个全局变量,可以从main()完全访问,并且赋值语句在那里也是合法的。没有抱怨。