在写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应该是一个不定的值。