在写C语言程序的时候,变量分为“全局变量”和“局部变量”。它们主要是“作用域”的不同,“全局变量”,作用域在整个C语言源文件之内;而“局部变量”,作用域在一对大括号内。
若是在同一个作用域内,定义两个“重名”的变量时,程序会报错。比如,如下程序,在程序编译时,就会产生错误信息:

#include<stdio.h>
int main(void)
{
      int num=123;
      int num=456;

      printf("num=%d\n",num);

      return 0;
} 

因为在第5行和第6行,在main函数之内,同时定义了两个“同名”变量num,所以,程序在编译的时候就会报错。但是,如果将其中一个num变量,定义在main函数的外面,那么就不会报错了。如下图所示程序:

#include<stdio.h>
int num=123;
int main(void)
{
    int num=456;
    printf("num=%d\n,num);
    return 0;
}

上述C语言程序中,在第3行,定义了一个变量num,在第7行也定义了一个变量num,虽然这两个变量的名字相同,都是“num”,但是,其中一个变量属于“全局变量”,作用域在整个C语言源文件;另一个(第7行)定义的变量,属于“局部变量”,作用域在main函数中,所以,它们是不冲突的,程序在编译的时候,也不会报错。最终,程序执行的结果,以“局部变量”的值为准,最终的执行结果应该是:
num=456
所以最后num的值取得是第5行的值,也就是456;
最后再附加一个代码

#include<stdio.h>
int i=1;
void main()
{
 int i=i;
 printf("%d\n",i);
} 
return 0;

这里输出的i应该是一个不定的值。