c语言形参的隐含存储类型,C存储类型
存儲方式
變量的作用域(空間)可分為全局變量和局部變量,變量的存儲方式可分為動態存儲方式和靜態存儲方式。
從變量值存在的時間(生存期)來觀察,有的變量在程序運行的整個過程都是存在的,有的變量則是在調用其所在的函數時才臨時分配存儲單元。也就是說,變量的存儲有兩種不同方式:靜態存儲方式和靜態存儲方式。
靜態存儲方式是指在程序運行期間由系統分配固定的存儲空間的方式
動態存儲方式是在程序運行期間根據需要進行動態的分配存儲空間的方式
在內存中供用戶使用的存儲空間(用戶區)可分為三種:程序區、靜態存儲區、動態存儲區
數據分別存放在靜態存儲區和動態存儲區中,全局變量存放在靜態存儲區中,在程序開始執行時給全局變量分配存儲區,程序執行完畢就釋放。在程序執行過程中,數據占據固定的存儲單元,而非動態地進行分配和釋放。
動態存儲區中存放數據
函數形式參數,在調用函數時給形參分配存儲空間。
函數中未定義的沒有用關鍵字static聲明的變量,即自動變量。
函數調用時的現場保護和返回地址等
存儲類別
C語言中,每個變量額函數都有兩個屬性:數據類型和數據的存儲類型,存儲類型指的是數據在內存中存儲的方式,即靜態存儲和動態存儲。
在定義和聲明變量或函數時,應同時指定其數據類型和存儲類別,也可采用默認方式指定。
C的存儲類別包括4種:自動的(auto)、靜態的(static)、寄存器的(register)、外部的(extern)。根據變量的存儲類別,可知道變量的作用域和生存期。
局部變量的存儲類別
動態局部變量(auto)
函數中的局部變量,若未聲明為static存儲類別,都是動態地分配存儲空間的,數據存儲在動態存儲區中。
函數的形參和在函數中定義的局部變量,都屬于此類。在調用函數時,系統會給這些變量分配存儲空間,在函數調用結束時,會自動釋放掉這些空間。因此這類局部變量稱為自動變量。
自動變量用auto做存儲類別的聲明。
實際上,關鍵字auto可省略,不寫auto則隱含指定為自動存儲類別,它屬于動態存儲方式。程序中大多數變量屬于自動變量。
靜態局部變量(static)
若希望函數的局部變量的值在函數調用結束后不消失而繼續保留原值,即占用的存儲單元不釋放,在下次再調用該函數時,該變量已有值。此時應指定該局部變量為“靜態局部變量”,使用關鍵字static進行聲明。
注意
靜態局部變量屬于靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放。而自動變量(動態局部變量)屬于動態存儲類別,分配在動態存儲區空間而非靜態存儲區空間,函數調用結束后即釋放。
對靜態局部變量是在編譯時賦初值,即只賦初值一次,在程序運行時它已有初值。以后每次調用函數時不再重新賦初值,而只是保留上次函數調用結束時的值。而對自動變量賦初值,不是在編譯時進行的,而是在函數調用時進行的,每調用一次函數重新給一次初值,相當于執行一次賦值語句。
若在定義局部變量時不賦初值的話,則對靜態局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符('\0‘對字符變量)。而對自動變量而言,其值是一個不確定的值。這是由于每次函數調用結束后存儲單元已釋放,下次調用時又重新分配單元,而所分配的單元中的內容是不可知的。
雖然靜態局部變量在函數調用結束后仍然存在,但其他函數是不能引用它的。因為它是局部變量,只能被本函數引用,而不能被其他函數引用。
總結
以上是生活随笔為你收集整理的c语言形参的隐含存储类型,C存储类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言考试长沙理工大学,2013年长沙理
- 下一篇: c语言规定对使用的变量必须,C语言为什么