1. 程式人生 > >C_局部變量&全局變量

C_局部變量&全局變量

bsp hour 返回 沒有 ron 函數返回 初始化 全局變量 分配

2018-5-9 ? Writen By Stephen.Yu

一、定義

1. 局部變量:在函數中定義的變量
2. 全局變量:在所有函數體之外定義

定義(Definition):聲明並分配內存;未分配內存則只是聲明(declaration)

二、局部變量&全局變量

1.某個函數中定義的變量不能被另一個函數使用

void time(int hour, int minute)
{
    printf("%d:%d\n", hour, minute);
}
int main(void)
{
    int hour=23, minute=59;
    time(hour, minute);
    return 0;
}

如上,main函數中定義了局部變量hour和minute,time函數中也有,雖然他們名稱相同,但卻是不同的變量,代表著不同的存儲空間,只是恰好存儲了相同的值。

技術分享圖片

技術分享圖片

如上,相同的值,但存儲空間完全不同。

2.每次調用函數時,局部變量都表示不同的存儲空間。
局部變量在每次函數調用時分配存儲空間,在函數返回時釋放存儲空間。

#include<stdio.h>

int hour=23, minute=59;
int x=10;

void time(void)
{
    printf("%d:%d\n",hour, minute);
}

int main(void)
{
    int hour=0, minute=30;
    time();
    printf("%d:%d in main\n",hour, minute);
    printf("x=%d\n",x);
    time();
    return 0;
}

執行結果如圖

技術分享圖片

在所有函數體之前定義的hour,minute的值進入了time函數,而當main函數再次對hour,minute定義時,其值將全局變量的值覆蓋。
然而,局部變量中沒有定義的x的值仍然是10。當我們再次執行time函數,hour和minute的值又回到了全局變量。

3.局部變量可以用任意類型相符的表達式來初始化,而全局變量只能用常量表達式初始化。
全局變量的初始值要求保存在編譯生成的目標代碼中,因此必須在編譯時就能計算出來。例如int hour=minute/60;這樣的初始化時不合法的。

4.如果全局變量在定義時不初始化,則初始值就是0(int為0;char為‘0‘;float為0.0)
如果局部變量在定義時不初始化,則初始值是不確定的

#include <stdio.h>

int foo(void)
{
    int i;
    printf("%d\n",i);
    i=777;
}

int main(void)
{
    foo();
    printf("再執行一次foo會得到什麽呢?\n");
    foo();
    return 0;
}

事實上,很有可能每一次運行的結果都是不一樣的。

技術分享圖片

C_局部變量&全局變量