C語言中變量儲存的類別
C語言根據變量的生存週期來劃分,可以劃分為靜態存儲方式和動態存儲方式。
C語言中變量儲存的類別靜態存儲方式:是指在程序的運行期間分配固定的存儲空間的方式。靜態存儲區中存儲放了在整個程序執行過程中都存在的變量,如全局變量
動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變量是根據程序運行需要而進行的需要而建立和釋放的。通常包括: 1. 函數形式參數;2. 自動變量;3. 函數調用時的現場保護、4. 和返回值地址等。
C語言中的存儲類別又分為4類:
自動(auto)、
靜態(static)、
動態(extern)
寄存器(register)
1、 用關鍵字auto定義的變量為自動變量,auto可以省略,auto不寫則隱含定為”自動存儲類別“,屬於動態存儲方式。
12345 | int fn( int a) //定義f函數,a為參數 { //定義b,c為自動變量
auto int b,c; } |
2、用static修飾的.為靜態變量,如果定義在函數內部,稱之為靜態局部變量;如果定義在函數外部,稱之為靜態外部變量,
1234567891011121314151617 | #include <stdio.h> void fn() {
static int x = 0 ;
x++;
printf( "fn: x=%d" ,x); } int main() {
int i;
for (i= 0 ;j< 10 ;i++)
{
fn();
}
return 0 ; }</stdio.h> |
注意:
靜態局部變量屬於靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放;
靜態局部變量在編譯時賦初值,即只賦初值一次;如果在定義局部變量時,不賦初值的話,則對靜態局部變量來説,編譯時自動賦初值0.(對數值型變量)或空字符(對字符變量)。
3、為了提高效率,C語言允許將局部變量得值放在CPU中的寄存器中,這種變量叫”寄存器變量“,用關鍵字register做聲明
1234 | void fn() {
register int i; } |
注意:只有局部自動變量和形式參數可以作為寄存器變量;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變量
局部靜態變量不能定義為寄存器變量。
4、用extern聲明的變量是外部變量,外部變量的意義是某函數可以調用在該函數之後定義的變量
1234567 | #include <stdio.h> int main() {
extern int x; //這裏聲明的是外部局部變量
printf( "extern x=%d" ,x); } int x= 100 ;</stdio.h> |
任務:
12345678910111213141516171819 | #include <stdio.h> void fn() {
static int x = 1 ;
x *= 2 ;
printf( "x=%d" ,x); } int main() {
int i;
for (i= 0 ;i< 5 ;i++)
{
fn();
}
extern int x;
printf( "x=%d" ,x);
return 0 ; } int x = 100 ;</stdio.h> |
運行結果是x=2;x=4;x=8;x=16;x=32;x=100
-
測試C語言功力的幾個問題
在實際的VC++教學中,發現很少有真正精通了C語言編程的學員,一般都有或多或少概念不是完全清楚的問題,特別是一些需要豐富的實戰經驗才能體會和明白的問題,如字符串,指針,類型轉換,定義指向函數的指針類型,這也是導致學習VC++困難的一個原因。下面就來和小編一起看看測...
-
2017計算機二級C語言精選習題
多做題有助於同學們及時檢測自己的學習情況。希望提供的2017計算機二級C語言精選習題,能夠幫助大家鞏固所學知識,為今後的學習打好基礎!(1)OSI模型的'物理層負責下列哪一種功能?A)格式化報文B)為數據選擇通過網絡的路由C)定義連接到介質的特徵D)提供遠程文件訪...
-
C語言程序基礎練習題帶答案
C語言傳遞參數均是以值傳遞(passbyvalue),另外也可以傳遞指針(apointerpassedbyvalue)。下面是小編為大家搜索整理的C語言專項訓練題,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!單選題1).下列關於標識符的説法中錯誤的是A.合法的標識符...
-
Mac系統怎樣使用終端編寫c語言程序
C語言是目前較為普遍的程序語言,它功能豐富、表達能力強、使用靈活方便、目標程序效率高,適合編制一般應用軟件。下面是應屆畢業生小編收集整理的Mac系統怎樣使用終端編寫c語言程序,希望對大家有幫助~~Mac系統使用終端編寫c語言程序的'方法工具/原料Mac系統,終...