在c語言中,變量有全局變量和局部變量之分,這一點和很多高級語言類似,如c#,java等。不過與c#,java中的局部變量如在全局變量作用域內則不允許與全局變量名相同,而c語言是允許這樣做的。這樣的做法極不提倡,但是c語言既然允許這么做,就分析一下其變量名相同時在不同位置調用該變量名時所實際調用的是哪個變量值。
代碼如下:
#include <stdio.h> //全局變量 //作用域:從定義開始到文件結束 //默認初始值為0 int c = 1; int test() { int c = 2; //這個位置int c = 1; int c = 2;都起作用, //則使用作用域最近的c = 2; //2 printf("%d\n",c); } //當在調用變量時有多個同名變量起作用的時候 //則使用作用域離自己最近的變量 //133423 int main() { //這個位置只有你int c = 1;起作用 //1 printf("%d\n",c); //局部變量 //作用域:從定義開始到函數結束 //沒有默認初始值 int c = 3; //這個位置int c = 1; int c = 3;都起作用, //則使用作用域最近的c = 3; //3 printf("%d\n",c); { //這個位置int c = 1; int c = 3;都起作用, //則使用作用域最近的c = 3; //3 printf("%d\n",c); //局部變量 //作用域:從定義開始到代碼塊結束 //沒有默認初始值 int c = 4; //這個位置int c = 1; int c = 3;int c = 4;都起作用, //則使用作用域最近的c = 4; //4 printf("%d\n",c); } //查看test()函數內部 //2 test(); //這個位置int c = 1; int c = 3;都起作用, //則使用作用域最近的c = 3; //3 printf("%d\n",c); return 0; }
結果:
1 3 3 4 2 3
總結:當在調用變量時有多個同名變量起作用的時候,則使用作用域離自己最近的變量
