C零基礎視頻-24-局部變量與全局變量


視頻地址:https://www.bilibili.com/video/av73224500
變量可以定義在函數內部也可以定義在函數外部,根據定義的位置不同,分爲局部變量全局變量。局部變量與全局變量的作用域不同。

局部變量

定義在函數內部的變量是局部變量,局部變量。局部變量的作用域限定在當前函數中。不同的函數中相同名字的局部變量不會互相影響。

#include <stdio.h>

void Func1()
{
    int nValueLocal = 0x12345678;
    printf("Func1中的局部變量:%X\r\n", nValueLocal);
}

void Func2()
{
    int nValueLocal = 0x55667788;
    printf("Func2中的局部變量:%X\r\n", nValueLocal);
}

int main(int argc, char* argv[])
{
    Func1();
    Func2();
    return 0;
}

這可以類比:不同的城市,可能有相同名字的公路。

全局變量

定義在函數外的變量就是全局變量,全局變量在整個工程作用域中都有效,多個函數操作同一個全局變量,會互相影響。

#include <stdio.h>

int g_nValue = 0;


void SetGlobalValue()
{
    g_nValue = 100;
    printf("我將全局變量的值設置爲:%d\r\n", g_nValue);
}

void AddGlobalValue()
{
    g_nValue += 5;
    printf("全局變量的增加後的值爲:%d\r\n", g_nValue);
}
int main(int argc, char* argv[])
{
    SetGlobalValue();
    AddGlobalValue();
    
    g_nValue *= 2;
    printf("不同的函數可以操作同一個全局變量:%d\r\n", g_nValue);
    return 0;
}

全局變量的一般作用

全局作用可以用於多個函數的交互,函數將需要交互的信息放在全局變量中,使得我們可以不用依賴於函數返回值,也可以減少函數參數的傳遞。

#include <stdio.h>

int g_nPetState = 0;

void ShowPetState()
{
    switch (g_nPetState)
    {
    case 0:
        printf("初始化狀態\r\n");
        break;
    case 1:
        printf("運動狀態\r\n");
        break;
    case 2:
        printf("喫飯狀態\r\n");
        break;
    case 3:
        printf("睡覺狀態\r\n");
        break;
    }
}

void SetRun()
{
    g_nPetState = 1;
}

void SetEat()
{
    g_nPetState = 2;
}

void SetSleep()
{
    g_nPetState = 3;
}

int main(int argc, char* argv[])
{
    ShowPetState();

    SetEat();
    ShowPetState();

    SetSleep();
    ShowPetState();

    SetRun();
    ShowPetState();
    return 0;
}

多文件中使用全局變量

同函數類似,全局變量可以將聲明與定義分離開。一般我們應該將全局變量定義在.c/.cpp文件中,然後在頭文件中聲明。
全局變量的聲明需要關鍵字extern

extern int g_nPetState;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章