全局變量:全局變量在整個程序內都是可知的,因此可以被任何代碼段所使用,他們在程序中執行時保持他們的值,可以再任何函數之外來創建他們,任何表達式都可訪問他們。
全局變量存儲在一個固定的存儲區,這時由編譯器設定的,當程序中多個函數使用一個變量時,全局變量就變得很有用。但是不必要的全局變量卻會帶來麻煩:
1、全局變量在整個程序運行中都占據內存,只有當程序結束時才被銷毀。
2、在應該使用局部變量的地方使用全局變量會降低函數的同用行,因為全局變量必須依靠在他本身之外的定義。
3、使用大量的全局變量會使程序因為不可預知的副作用而產生錯誤。(有可能會因改變全局變量的值而產生錯誤)
例:
#include
<stdio.h>
int
count;
//全局變量
int
main()
{
count
=
100
;//可以使用count
func1
();
return
0
;
}
局部變量:在函數內部聲明的變量成為局部變量,更具體的說是在代碼塊內部創建的變量叫做局部變量(代碼塊就是一對{}內的內容),局部變量在進入代碼塊被創建,出了代碼塊立即被銷毀。
例如:
void fun1
(
void
)
{
int
x;
x = 10;
}
void
fun2(
void
)
{
int
x;
x = -99;
}
這兩個x就是局部變量。因為局部變量在出了代碼塊就被銷毀,因此我們可以使用static這個關鍵字修飾變量,使他的值保留下來。沒有被static聲明過得局部變量都存儲在堆棧上。
例:
#include
<stdio.h>
int
count; //全局變量
void
func1(
void
);
int
main()
{
count
=
100
;
func1
();
return
0
;
}
void
func1(
void
)
{
int
count; //局部變量
for
(count =
1
; count <
10
; count++)
{
putchar
(
'.'
);
}
}
在這個例子中count被定義了兩次,一次是全局變量,一次是局部變量,當全局變量和局部變量重名時,在局部變量聲明的區域內我們以局部變量作為引用對象,並且再次期間對於全局變量沒有任何影響。
形式參數:形式參數出現在函數內,當函數要接受實參時,必須聲明接受實參的變量,這些變量就是形參,同局部變量一樣,形參再出了函數之后就被銷毀。