做用域是從空間的角度來分析的,c++的做用域以花括號分隔,定於於全部{ }之外的名字具備全局做用域,定義於{ }之內的名字具備塊做用域html
生命週期是從變量存在的時間角度來分析的,生命週期能夠分爲靜態存儲期和動態存儲期,這是由變量的靜態存儲方式和動態存儲方式決定的c++
靜態存儲方式一般是指在變量在定義時就分配固定內存並一直保持不變, 直至整個程序結束,變量的內存在程序編譯階段就已經分配好函數
動態存儲是指在程序執行過程當中,使用變量時才分配內存, 使用完畢時當即釋放htm
c++的變量可分爲靜態局部變量、全局(外部)變量、自動變量、寄存器變量
blog
1)在函數體內用static聲明的變量生命週期
2)定義時沒有初始值將默認初始化爲0內存
3)靜態局部變量雖然生存週期爲整個程序,可是其做用域僅限於定義它的函數內,也就是說在其餘函數中不能使用它作用域
4)靜態局部變量初始化的時機:c語言:編譯階段分配好內存以後,就會進行初始化;c++:static局部變量在執行相關代碼時纔會進行初始化get
1)在函數外部聲明的變量稱爲全局變量,分爲靜態外部變量、非靜態外部變量編譯
2)靜態全局變量:在函數體外用關鍵字static聲明的變量,只容許被本源文件(.cpp)中的函數使用(static的隱藏做用)
3)非靜態全局變量:在函數體外沒有用關鍵字static聲明的變量,容許被其它源文件中的函數使用,當其餘源文件中的函數使用非靜態外部變量時,須要在使用用前用關鍵字extern進行說明
1)自動變量意爲有自動的生命週期
2)在函數體內或者在複合語句內,用關鍵字auto聲明的變量,關鍵字auto能夠省略,咱們常說的局部變量就是自動變量
3)定義時不初始化,其值是不肯定的
1)通常狀況下,變量的值都是存儲在內存中的,爲提升執行效率,c/c++容許將局部變量存放到寄存器中,這種變量就稱爲寄存器變量
2)用關鍵字register聲明
1)靜態變量包含靜態全局變量和靜態局部變量
2)全局變量包含靜態全局變量、非靜態全局變量