




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本章重點12.1 局部變量、全局變量和存儲分類12.2 局部變量及其作用域和生存期 12.3 全局變量及其作用域和生存期 12.4 函數的存儲分類 第第12章章 C語言中用戶標識符的作用域和存儲類語言中用戶標識符的作用域和存儲類12.1 局部變量、全局變量和存儲分類12.1.1 用戶標識符的作用域標識符的作用域就是指程序中的某一部分,在這一部分中,該標識符是有意義的,可以被C編譯和連接程序所識別。例如,變量都有自己的作用域,在一個函數內定義的變量不能在其它函數中引用;變量的作用域與其定義語句在程序中出現的部位有直接關系。據此可以劃分出局部變量和全局變量。12.1.2 局部變量、全局變量和存儲分
2、類1局部變量在一個函數內(或復合語句中)定義的變量稱為內部變量,這些變量只能在定義它的函數(或復合語句)中使用,離開了定義它的函數(或復合語句)就不能使用,把這些變量稱“局部變量”。例如:float func1(int a) int b; /*本函數中變量a,b有效*/幾點說明:(1)主函數中定義的變量m和n是局部變量,只能在主函數中有效,在其它函數中無效。(2)不同函數中可以使用相同名字的變量,它們代表不同的對象,互不干擾。如func1函數中定義的b和func2函數中的b,它們占有不同的存儲單元,是不同的變量。(3)形式參數也是局部變量。形式參數也只能在本函數中有效,其它函數不能調用。如形式
3、參數a只能在func1函數中有效,形式參數x,y只能在func2函數中有效。(4)在函數內部的復合語句中定義的變量,只在該復合語句中有效,出了復合語句就無效。在函數開始定義的變量也可以與復合語句中的變量相同,但它們代表的不是同一個變量,它們占用不同的存儲單元。2全局變量在函數之外定義的變量稱為外部變量,外部變量是全局變量,全局變量可以為本源程序中的所有其它函數所公有。它的有效范圍是從定義變量的位置開始到本源文件結束。例如:int m,n;/* 定義兩個外部變量m和n,其作用范圍全局的即從此處到程序結束*/void f1(a,b)int a,b; 幾點說明:(1)全局變量必須定義在函數之外,如變
4、量a、b、m和n。(2)全局變量的有效范圍是從定義的位置開始到整個程序的結束。如m和n的有效范圍是整個程序,而a和b的有效范圍僅是f1函數(3)在一個函數中可以使用局部變量和相應的全局變量。(4)局部變量可以和全局變量同名,若同名,在函數中使用的變量是局部變量。3存儲分類變量具有數據類型,C語言的編譯系統根據變量的數據類型給變量分配存儲空間,用來存放該變量的值,也就是說變量的數據類型決定了變量占多少個存儲單元。變量的存儲類型有四個,分別是自動型、寄存器型、靜態型和外部參照型,其說明符分別是auto、register、static和extern。 12.2 局部變量及其作用域和生存期12.2.1
5、 auto變量當在函數內部或復合語句內定義變量時,如果沒有指定存儲類或使用了auto說明符,系統就認為所定義的變量具有自動類別。例如:float a; 等價于 auto float a;12.2.2 register變量寄存器變量也是自動類變量。它與auto變量的區別在于,寄存器型變量是分配在CPU的通用寄存器中的,而不是像一般變量那樣,占內存單元。 12.2.3 靜態存儲類的局部變量當在函數體(或復合語句)內部,用static來說明一個變量,可以稱為靜態局部變量,其作用域仍與auto、register類型的變量一樣。 12.3 全局變量及其作用域和生存期12.3.1 全局變量的作用域和生存期
6、全局變量只有靜態類別。對于全局變量可以使用extern和static兩種說明符。全局變量是再函數外部任意位置上定義的變量,它的作用域是從變量定義的位置開始,到整個源文件結束為止。 12.3.2 在同一編譯單位內用extern說明符來擴展全局變量的作用域當全局變量定義在引用函數之后時,應該在函數中用extern對此全部變量進行說明,以通知編譯程序不需再給它開辟存儲單元。這時其作用域從extern說明處起,延伸到該函數的末尾。全局變量的說明與其定義不同,定義只能出現一次,在定義全局變量時,不可使用extern說明符,而對全局變量的說明,可以多次出現在需要的地方,而且必須用extern說明。12.3
7、.3 在不同編譯單位內用extern說明符來擴展全局變量的作用域C語言中,每個可進行單獨編譯的源文件稱為“編譯單位”,當一個程序由多個編譯單位組成,并且在每個文件中均需要引用同一個全局變量,這時若在每個文件中都定義了一個所需的同名全局變量,則在“連接”時將會產生“重復定義”的錯誤。解決辦法通常是,在其中一個文件中定義所有變量,而在其它用到這些全局變量的文件中用extern對這些變量進行說明,聲明這些變量已在其它編譯單位中定義,通知編譯程序不必再為它們開辟存儲單元。12.3.4 靜態全局變量當用static說明符說明全局變量時,此變量稱為靜態全局變量。靜態全局變量只限于本編譯單位使用,不能被其他
8、編譯單位所引用。12.4 函數的存儲分類12.4.1 用extern說明函數外部函數是指可以被其它文件中的函數調用的函數,在定義函數的時候如果在“類型說明符”前加上 “extern”,則此函數就為外部函數。其定義格式如下:extern 類型說明符 函數名(形參說明列表)如果在定義函數時省略extern,則隱含為外部函數。 12.4.2 用static說明函數如果一個函數只能被本文件中其它函數調用,而不能被其它源文件中的函數調用,稱它為內部函數,有時也稱靜態函數。在定義內部函數時,在數據類型符前需加上static(有時也說函數的存儲類型為static)。其定義格式如下: static 類型說明符 函數名(形參說明列表)使用靜態函數可以避免不同編譯單位因函數同名而引起混亂。若強行調用靜態函數,將會產生出錯信息。#include int a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年初級銀行從業資格之初級個人理財通關題庫(附帶答案)
- 2025跨國技術合作合同
- 2025年廣州市國際旅游組團的合同
- 2025綠化景觀改造項目合同 標準版模板
- 2025年其它貿易合同外資代理協議樣本
- 基礎磚胎膜的砂漿標號
- 斜屋面吊籃施工方案圖片
- 2025調味品供貨合同(醬油)
- 借東西合同樣本
- 沉井牽引管施工方案
- 天然氣管道置換記錄表
- 護士單人心肺復蘇技術操作考核評分標準
- 2019年四川省廣元市利州區萬達中學小升初數學擇校考試卷
- 高中生物奧賽輔導資料
- 人類行為與社會環境課件
- 搞好班組安全建設
- 富馬酸伊布利特幻燈課件
- 陜西省潼關縣潼峪-蒿岔峪金礦開采項目環評報告
- 高中化學常見晶體的結構及晶胞
- 著色探傷作業指導書
- 2002-2022廣東省深圳市中考數學歷年真題(共24套最全)學生版+解析版
評論
0/150
提交評論