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