c語言塊級作用域 C語言 作用域

2021-10-13 02:45:31 字數 3013 閱讀 5865

c語言 作用域

型別作用域

生命週期

auto變數

一對{}內

當前函式

static區域性變數

一對{}內

整個程式執行期

extern變數

整個程式

整個程式執行期

static全域性變數

當前檔案

整個程式執行期

extern函式

整個程式

整個程式執行期

static函式

當前檔案

整個程式執行期

register變數

一對{}內

當前函式

區域性變數與全域性變數

一、變數作用域

c語言變數的作用域分為:

**塊作用域(**塊是{}之間的一段**)

函式作用域

檔案作用域

二、區域性變數

1、說明

區域性變數也叫auto自動變數(auto可寫可不寫),一般情況下**塊{}內部定義的變數都是自動變數,它有如下特點:

在乙個函式內定義,只在函式範圍內有效

在復合語句中定義,只在復合語句中有效

隨著函式呼叫的結束或復合語句的結束區域性變數的宣告宣告週期也結束

如果沒有賦初值,內容為隨機

2、案例

#include

voidtest()

內部auto int b = 10;

}int main(void)

//a = 10;//err離開if()的復合語句,a已經不存在

return 0;

區域性變數 案例使用

#define _crt_secure_no_warnings#include#include#include#include#include

void fun01(inta)

int main(void)

return 0;

區域性變數 案例使用:2

三、全域性變數

1、說明

在函式外定義,可被本檔案及其它檔案中的函式所共用,若其它檔案中的函式呼叫此變數,須用extern宣告

全域性變數的生命週期和程式執行週期一樣

不同檔案的全域性變數不可重名

2、案例

#define _crt_secure_no_warnings#include#include#include#include#include

//全域性變數//全域性變數、在函式外部定義的變數、儲存資料區、可以和區域性變數重名//作用域:整個專案中所有檔案、如果在其他檔案中使用 需要宣告 extern//生命週期:從程式建立到程式銷毀//全域性變數未初始化、值為0

extern int a = 10;int main(void)

printf("%d\n", a);int a = 123;//匿名內部函式、執行完銷毀

//資料在操作時會採用就近原則

printf("%d\n", a);return 0;

全域性變數 使用案例

四、靜態(static)區域性變數

1、說明

static區域性變數的作用域也是在定義的函式內有效

static區域性變數的生命週期和程式執行週期一樣,同時staitc區域性變數的值只初始化一次,但可以賦值多次

static區域性變數若未賦以初值,則由系統自動賦值:數值型變數自動賦初值0,字元型變數賦空字元

2、案例

#include

voidfun1()

voidfun2()

int main(void)

fun1();

fun1();

fun2();

fun2();return 0;

靜態區域性變數 使用案例

#define _crt_secure_no_warnings#include#include#include#include#include

voidfun04()

int main(void)

return 0;

靜態區域性變數 使用案例:2

五、靜態(static)全域性變數

1、說明

在函式外定義,作用範圍被限制在所定義的檔案中

不同檔案靜態全域性變數可以重名,但作用域不衝突

static全域性變數的生命週期和程式執行週期一樣,同時staitc全域性變數的值只初始化一次

2、案例

#define _crt_secure_no_warnings#include#include#include#include#include

static int c = 10;int main(void)

printf("%d\n", c);return 0;

靜態全域性變數 使用案例

六、extern全域性變數宣告

宣告乙個變數,這個變數在別的檔案中已經定義了,這裡只是宣告,而不是定義。

extern int a;

靜態函式與全域性函式

一、函式作用域

在c語言中函式預設都是全域性的,使用關鍵字static可以將函式宣告為靜態,函式定義為static就意味著這個函式只能在定義這個函式的檔案中使用,在其他檔案中不能呼叫,即使在其他檔案中宣告這個函式都沒用。對於不同檔案中的staitc函式名字可以相同。

注意:允許在不同的函式中使用相同的變數名,它們代表不同的物件,分配不同的單元,互不干擾。

同一原始檔中,允許全域性變數和區域性變數同名,在區域性變數的作用域內,全域性變數不起作用。

所有的函式預設都是全域性的,意味著所有的函式都不能重名,但如果是staitc函式,那麼作用域是檔案級的,所以不同的檔案static函式名是可以相同的。

二、全域性函式案例

#define _crt_secure_no_warnings#include#include#include#include#include

//全域性函式//新增函式聲名

voidfun03();//函式可以呼叫自己、稱為遞迴函式

int main(void)

int main(void)

fun03();return 0;

靜態函式 使用案例

C語言 作用域

復合語句指if while等條件語句 區域性變數 auto自動變數 auto可寫可不寫 一般情況下 塊 內部定義的變數都是自動變數 全域性變數 在函式外定義,可被本檔案及其它檔案中的函式所共用,若其它檔案中的函式呼叫此變數,須用extern宣告 變數型別 定義位置 宣告週期 區域性變數 函式或復合語...

全域性作用域 塊級作用域

瀏覽器環境有一頂層物件window,window的屬性和var的全域性變數等價。如果用var設定了window物件的內建屬性作為變數,內建屬性值將會被覆蓋。如果是window物件的內建屬性,輸出預設值 非內建則輸出underfined。console.log window.name window.n...

塊級作用域

跨級作用域本身沒有宣告可以說的,就需要注意兩點 1.跨級作用域內宣告的var變數並不會存在這個塊級作用域內,而是會提公升到非塊級作用域內 2.在塊級作用域內宣告function,在不同瀏覽器會有不同結果,如果是根據條件宣告function的話,請用var func function的形象 但是為什麼...