上海網(wǎng)站企業(yè)軟文推廣是什么
1 static的作用對(duì)象
????????修飾變量? 分為局部變量和全局變量? ?分別稱為靜態(tài)局部/全局變量
? ? ? ? 修飾函數(shù) 稱為靜態(tài)函數(shù)
2 static改變了什么
改變了生存周期;就是一個(gè)變量、函數(shù)從分配內(nèi)存去表示到回收內(nèi)存的過(guò)程
改變了作用域;就是可以在哪些文件里可以使用該函數(shù)
3 static對(duì)各個(gè)作用對(duì)象的作用
3.1局部變量
????????局部變量就是在函數(shù)內(nèi)定義的變量,普通的局部變量,生存周期是隨著函數(shù)的結(jié)束而結(jié)束,每次函數(shù)重新執(zhí)行,局部變量都是新的值,不會(huì)保留上次的值。當(dāng)用static修飾后,局部變量的生存周期就是當(dāng)程序結(jié)束才會(huì)結(jié)束。再次調(diào)用函數(shù)時(shí),用static修飾的變量會(huì)保留上一次的值。
????????或者說(shuō)static 修飾局部變量的時(shí)候本來(lái)一個(gè)局部變量是存放在棧區(qū)的,如果被static修飾就存儲(chǔ)到靜態(tài)區(qū)了static 修飾局部變量改變了變量的存儲(chǔ)類型(位置),使得這個(gè)靜態(tài)變量的生命周期變長(zhǎng)了,直到程序結(jié)束才結(jié)束但是作用域不變如下圖


????????應(yīng)用:在函數(shù)內(nèi),我們想保留某些變量上一次的值,就可以用static去修飾該變量。比如:想統(tǒng)計(jì)該函數(shù)被執(zhí)行的次數(shù)時(shí),就可以定義被static修飾的int型變量,每執(zhí)行一次該變量就++。
總結(jié):用static修飾的局部變量,改變了生存周期,但是沒(méi)有改變其作用域。改變其生存周期的原因是被static修飾的局部變量被存放在.bss段或者.data段,而普通的局部變量是存放在棧上的。
?3.2全局變量
全局變量具有外部鏈接屬性,所以在其他源文件內(nèi)部依然可以使用(方法要正確)
static修飾全局變量,改變了這個(gè)全局變量的鏈接屬性,由外邊鏈接屬性變成了內(nèi)部鏈接屬性
這個(gè)靜態(tài)變量只能在自己所在的源文件內(nèi)部使用,不能在其他源文件內(nèi)部使用了
感覺(jué)像是作用域變小了
????????也可理解為全局變量用static修飾改變了作用域,沒(méi)有改變生存周期。普通的全局變量是可以被其他的.c文件引用的,一旦被static修飾,就只能被定義該全局變量的.c文件引用,使得該全局變量的作用范圍減小。
作用:當(dāng)一個(gè)全局變量不想被其他.c文件引用時(shí),可以用static修飾,這樣其他的文件就不能通過(guò)extern的方式去訪問(wèn),這樣主要是為了數(shù)據(jù)安全。
總結(jié):改變其作用域,沒(méi)有改變生存周期。
3.3函數(shù)
函數(shù)用static修飾,改變了作用域。普通的函數(shù)是可以通過(guò)頭文件聲名的方式被其他文件調(diào)用,被static修飾后就只能在本文件里被調(diào)用,這樣是為了數(shù)據(jù)的安全。
或者說(shuō)
static 修飾函數(shù)和static修飾全局變量是一樣的
函數(shù)是具有外部鏈接屬性的,但是被static修飾,就變成了內(nèi)部鏈接屬性
使得這個(gè)函數(shù)只能在自己所在的源文件內(nèi)部使用,不能在其他文件內(nèi)部使用的
作用:有些函數(shù)并不想對(duì)外提供,只需要在本文件里調(diào)用,這時(shí)候就可以用static去修飾。
總結(jié):改變了作用域,沒(méi)有改變其生存周期。