1. 關於C語言變數存儲類型的問題
首先,變數問題是學好C語言對於初學者來說是一個比較高的要求了,你在剛開始胡褲的時候有這些疑問就證明你已經入門了,慢慢來,你會弄清楚的。
再者褲粗簡,關於你說的那個開始已經定義了全局變數i,而main函數中又有個i的聲明,定義全局變數,是為了在局部函數里對局部變數修改了之後,防止對原變數的篡改。局部變數只在你定義的那個局部范圍里有用,當那個函數執行完畢之後,內存會釋放該局部變數的內存。從而不會出現篡改全局變數的問題。或許在你這個全局變數之中,該全局變數沒啥大的作用,但是在一些大型的程序中,全局變數是有很大的作用的。
對於這些變數的知識,你可以多看幾遍教材,以後自己慢慢地就凳絕會了解的,我沒有很仔細的看你的程序,但是我相信變數問題也就那麼幾個,你要區分全局變數和局部變數,靜態變數和動態變數,就行了。
2. 【C語言中用戶標識符的作用域和存儲類】不會做的題~弄不清各種作用域的范圍~求高手指點!!追加積分!!
1.因為遲睜static修飾的森螞是i,m,所以i和m的值都會保留。但main函數中的m只是局部變數,所以main中的m都是1.
結果是8和17
2.結果是4,因為a只是局部變數,所以a的值不會保留。
3.結果是2 32/13...因為int m=13定義在外面是全局變數,在整個程序中都有效的,函數fun2中定義的局部變數m不會受外面全局變數改變。因為局部變數優先全局變數此旦埋。
3. C語言中變數的存儲類型有哪幾種,存儲方式哪幾種謝嘍
在C語言中,對變數的存儲類型說明有以下四種:
1、auto 自動變數
2、register 寄存器變數
3、extern 外部變數
4、static 靜態變數
所謂存儲類型是指變數佔用內存空間的方式,也稱為存儲方式。
變數的存儲方式可分為「靜態存儲」和「動態存儲」兩種。
1、靜態存儲變數通常是在變數定義時就在存儲單元並一直保持不變,直至整個程序結束。
2、動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,調用函數完畢立即釋放。
如果一個函數被多次調用,則反復地分配、釋放形參變數的存儲單元。從以上分析可知,靜態存儲變數是一直存在的,而動態存儲變數則時而存在時而消失。
(3)作用域存儲類問題擴展閱讀:
變數根據定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。
一、從作用域看:
1、全局變數具有全局作用域。全局變數只需在一個源文件中定義,就可以作用於所有的源文件。當然,其他不包含全局變數的定義的源文件需要用extern關鍵字再次聲明這個全局變數。
2、靜態局部變數具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結束一直存在,它和全局變數的區別在於全局變數對所有函數都是可見的,而靜態局部變數只對定義自己的函數體始終可見。
3、局部變數也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數執行期間存在,函數的一次調用執行結束後,變數被撤銷,其所佔用的內存也被收回。
4、靜態全局變數也具有全局作用域,它與全局變數的區別在於如果程序包含多個文件的話,它作用於定義它文件里,不能作用到其他文件里,即被static關鍵字修飾過的變數具有文件作用域。這樣即使兩個不同的源文件都定義了相同名字的靜態全局變數,它們也是不同的變數。
二、從分配空間看:
全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間。
全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。
而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一個源程序的其他源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其他源文件中引起錯誤。
1、靜態變數會放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。
2、變數用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。
參考資料來源:網路-變數-存儲類型
4. 想問一道關於全局變數和局部變數作用域和生存期的問題
A)局部變數說明為 static 存儲類,其作用域將
5. 如何理解編程變數的生命周期及作用域
軟體工程中有用。用於信息隱藏。也就是說,你編寫的模塊只有內部可以引用,外部無法修改和查看。比如面向對象的編程中經常有這個概念。
還有就是存儲類的問題,自動存儲類變數在進入聲明的塊時候生成,在塊活動期間存在,退出塊的時候刪除。反之全局變數和靜態變數在整個程序執行期間都可型鋒以用。而前者就存在被意外函數訪問和修改的危險磨襪,最好少用。
而生命周期是個時間概念,比瞎租激如析構函數是對象的生命周期結束時自動調用的,用於銷毀函數或類。
6. C語言中,哪種存儲類的作用域與生命周期是不一致的
靜態變數的生命周期是整個程序陪廳的生命周期。
析構函數析構的是動態申請的內存。
而類中的成員變數是在類的對象聲唯亂族指弊明時創建,在對象生存期結束後截止。
7. C語言中怎麼區分動態存儲類別與靜態存儲類別
內存中的變數,其存儲類別有三個方面,分別是作用域,存儲時期和鏈接。
1.作用域分為代碼塊作用域和文件作用域。
2.存儲時期分為靜態,自動和分配。
3.鏈接分為空鏈接,內部鏈接和外部鏈接。
因為全部詳細講的話,字太多,我針對你的問題說說。
首先,具有文件作用域的變數肯定是靜態的。
其次,具有文件作用域的變數默認都是動態的,如果在前面加上static關鍵字,那就變成靜態的了。
8. C有關局部變數及其作用域和生存期的問題
A 是正確粗扮伍缺賀的,生存期延長:離開局部時,局部變數的值會保存,下次再回到局部時可以讀取保存的值。
B 錯。全局變數聲明為static後,作用域非但沒有擴大,反而縮小,只能在所在的文件內使用。
C 錯。靜態岩或變數默認初始化為0.
D 錯。局部變數可以使用static, 形參不能。
9. 想問一道關於全局變數和局部變數作用域和生存期的問題
不是每個編譯器都是按標准實現的,這個可以是您的編譯器的問題
10. C語言變數的作用域和生存期問題
執行f1時a不存在,如果定義的是靜態變數,就在生存期中,如果是默認的動態變數,就不在