1.基本概念
變數有資料型別: char/unsigned char/short/unsigned short/int/unsigned int long/unsigned long/ float/double
定義變數 int a = 100;//自動分配4位元組的記憶體空間,其中儲存100
2.從作用域與可見性的角度來分類
全域性變數:函式之外定義的變數屬於全域性變數
區域性變數:函式內部定義的變數屬於區域性變數
形參變數也是區域性變數
3.特點
區域性變數
1)作用域:只在其定義的函式內部有效
2)生命週期
隨著函式被呼叫,而分配區域性變數對應記憶體空間(生)
隨著函式呼叫結束,區域性變數對應的記憶體空間也收回(死)
全域性變數
1)作用域
全域性有效(所有函式中都可以使用)
2)生命週期
隨著程式的啟動,全域性變數就分配了對應的記憶體空間(生)
隨著程式的結束,全域性變數對應的記憶體空間才**(死)
需要注意的事項:
1)如果區域性變數和全域性變數重名了,函式內部會優先使用區域性變數
2)區域性變數的作用域與生命週期的引申
區域性變數的生命始於
作用域,定義該區域性變數的之中
3)全域性變數 只定義不初始化,系統會自動將其對應的記憶體空間初始化為0
區域性變數 只定義不初始化,其對應的記憶體空間中的記憶體不可預知
4.關鍵字static //靜態的
可以使用它來修飾區域性變數
全域性變數
函式被static修飾的全域性變數,稱作靜態全域性變數
被static修飾的區域性變數,稱作靜態區域性變數
4.1 被static修飾的區域性變數
int f(void)
靜態區域性變數,其作用域和普通的區域性變數作用域相同就是函式內部 (內部)
其生命週期始於程式開始執行,結束於程式結束 (全域性變數的生命週期相同)
總結:static修飾區域性變數 作用域不變 拉長了區域性變數的生命週期
4.2 被static修飾的全域性變數
mkdir static
cd static
vim main.c
#include extern int g_a;
int main(void)
vim func.c
#include int g_a = 100;// 全域性變數
void func(void)
gcc main.c func.c
./a.out //程式正常執行
修改func.c
vim func.c
int g_a = 100;// 全域性變數 替換為
static int g_a = 100;
gcc main.c func.c //報錯 認為找不到變數g_a
通過以上實驗:
static 修飾全域性變數 使得全域性變數不再是全域性(所有的.c)可見的
縮小為值在本檔案中可見
總結:
作用域(可見性) 生命週期
區域性變數 函式內部(內部) 隨著函式呼叫的開始()而結束
靜態區域性變數 函式內部(內部) 隨著程式的啟動而開始
隨著程式的結束而結束
(static拉長了區域性變數的生命週期)
全域性變數 全域性可見(所有.c中可見) 隨著程式的啟動而開始
隨著程式的結束而結束
靜態全域性變數 只在定義該變數的.c中可見 隨著程式的啟動而開始
其它.c檔案中不可見 隨著程式的結束而結束
(static縮小了全域性變數的
可見性)
4.3 static修飾函式
vi main.c
extern void func(void); //func的宣告
int main()
gcc main.c func.c
./a.out
static修飾函式的作用類似於修飾全域性變數
使得該函式只在定義的.c檔案中見,
其它.c檔案不可用
vi func.c
把 void func(void)替換為
static void func(void)
gcc main.c func.c //報錯 被staic修飾的函式在其它.c檔案中不可見
筆試題:談談對static關鍵字的理解?
修飾區域性變數 。。。
修飾全域性變數 。。。
修飾函式…
5.extern關鍵字
int g_a; //定義乙個全域性變數 意味著要分配4位元組的記憶體空間
extern int g_a;//宣告乙個全域性變數 告訴編譯器已經存在乙個變數叫g_a
//不需要編譯器再去分配記憶體空間了
//該**的主要目的就是告訴編譯器後邊再分析到g_a,
//你編譯器知道它是乙個int型別的變數就好了
C 中 作用域及可見性
作用域是用來表示某個識別符號在什麼範圍內有效,可見性是指識別符號是否可見,可引用。1.作用域 作用域是這樣乙個區域,識別符號在程式的這個區域內是有效的。c 的作用域主要有四種 函式原型作用域 塊作用域 類作用域和檔案作用域。a.函式原型作用域 函式原型大家還記得嗎?比如 void fun int x...
note C 作用域 可見性與生存期
作用域是乙個識別符號 變數 常量 函式等 在程式正文中有效的區域。函式原型作用域 區域性作用域 塊作用域 類作用域 全域性作用域 檔案作用域 命名空間作用域。即參數列。函式原型中的引數,其作用域始於 結束於 例 double area double radius 區域性作用域舉例 void fun ...
go 函式的作用域及可見性
比如 test.go 中 我們定義 了 a 作為全域性變數,那麼在這個程式中任何地方都可以呼叫a,這個 var a int 100 func add a int,b int int package main import fmt zhangyue res listen6 可見性 func main ...