static在c語言中主要是兩種用法
1、修飾區域性變數
2、修飾函式和全域性變數
區域性變數按照儲存形式來分,分為auto,static,register
首先從記憶體四區的角度去看,auto即為普通的區域性變數,儲存在棧上,當函式結束時,隨之釋放。
register為暫存器變數,存放在暫存器裡面,呼叫速度快。
在c語言中register變數不能取位址,會報錯。
而在c++中,對register做了增強,黨c++編譯器發現程式中需要取register變數的位址時,register對變數的宣告變得無效。
static修飾區域性變數時該變數是存放在靜態儲存區,生命週期是整個程式結束。
static區域性變數初次定義時就要初始化,且只能初始化一次。如果在定義的時候不初始化,編譯器就會自動賦值為0;(也就是說如果重複呼叫同乙個函式,在第二次呼叫時,就不會再執行static區域性變數初始化那句話 了)
特點: static區域性變數的」記憶性」與生存期的」全域性性」
所謂」記憶性」是指在兩次函式呼叫時, 在第二次呼叫進入時, 能保持第一次呼叫退出時的值.
void staticlocalvar()
int main()
注意事項:
1. 「記憶性」, 程式執行很重要的一點就是可重複性, 而static變數的」記憶性」破壞了這種可重複性, 造成不同時刻至執行的結果可能不同.
2. 「生存期」全域性性和唯一性. 普通的local變數的儲存空間分配在stack上, 因此每次呼叫函式時, 分配的空間都可能不一樣, 而static具有全域性唯一性的特點, 每次呼叫時, 都指向同一塊記憶體, 這就造成乙個很重要的問題 ---- 不可重入性
二、當static修飾全域性變數或者函式時,不是為了限制其儲存方式,而主要是為了限制該全域性變數或者函式的作用域僅限於本檔案,所以又稱為內部函式。此件時, 對於外部(全域性)變數, 不論是否有static限制, 它的儲存區域都是在靜態儲存區, 生存期都是全域性的. 此時的static只是起作用域限制作用, 限定作用域在本模組(文)內部.
使用內部函式的好處是:不同的人編寫不同的函式時,不用擔心自己定義的函式,是否會與其它檔案中的函式同名。
在C語言中Static的用法
一 c程式儲存空間布局 c程式一直由下列部分組成 1 正文段 cpu執行的機器指令部分 乙個程式只有乙個副本 唯讀,防止程式由於意外事故而修改自身指令 2 初始化資料段 資料段 在程式中所有賦了初值的全域性變數,存放在這裡。3 非初始化資料段 bss段 在程式中沒有初始化的全域性變數 核心將此段初始...
Static在C語言中的應用
概念 what static 作用域生命週期 函式 一直存在 定義原始檔 一直存在 內部變數 呼叫完銷毀 函式內 一直存在 外部變數 一直存在 定義原始檔內 一直存在 目的 why l對於函式來講,只有乙個目的,就是限定作用域,禁止當前檔案外的檔案呼叫 l 對於內部變數,僅僅是為了該值能夠永久留存,...
static在C語言中的使用
static在c語言中的用法主要是倆中 1.修飾區域性變數 static修飾區域性變數時存放在靜態儲存區,生命週期是整個程式生命週期。static在區域性變數使用時初次定義就要初始化,且只能初始化一次,如果不初始化就自動賦值為0。重複呼叫同一函式,第二次呼叫時不會執行static區域性變數初始化的那...