視頻地址: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;