




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理C程序設(shè)計(jì)八 存儲(chǔ)屬性及預(yù)處理 專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性8.1.1變量的作用域變量有兩個(gè)方面的屬性:數(shù)據(jù)類(lèi)型和存儲(chǔ)類(lèi)別變量的存儲(chǔ)屬性指:變量的作用域和生存期。作用域有2種:局部變量:在函數(shù)內(nèi)有效(定義在函數(shù)內(nèi)或形式參數(shù))全局變量:從定義點(diǎn)到文件的結(jié)尾有效。(定義在函數(shù)外,又稱(chēng)外部變量)注意分析作用域時(shí)不涉及程序運(yùn)行的流程。以下哪些是局部變量,哪些是全局變量?判斷劃線語(yǔ)句是否正確。float x=6,y;main() int i; i=x; x=j;int j;fun1(int *p) int a;
2、a=i*2; fun2() int b; b=x+j;對(duì)錯(cuò)錯(cuò)對(duì)專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性全局變量的作用:(1)可以從函數(shù)得到多個(gè)返回值。(2)簡(jiǎn)化形參。下面程序采用全局變量得到多個(gè)值int a,b;main().swap( );.swap( )int c;c=a;a=b;b=c;專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性全局變量的作用:(1)可以從函數(shù)得到多個(gè)返回值。(2)簡(jiǎn)化形參。比較如下的兩個(gè)程序:采用全局變量可以簡(jiǎn)化形參。main().fun1(a,b,p);fun2(a,b,p,4);.fu
3、n1(int a,int b,int *p).fun2(int a,int b,int *p,int n).fun1(a,b,p);.int a,int b,int *p;main().fun1();fun2(4);.fun1().fun2(int n).fun1();.專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性全局變量的作用:(1)可以從函數(shù)得到多個(gè)返回值。(2)簡(jiǎn)化形參。全局變量的缺點(diǎn):使函數(shù)的通用性降低。程序容易出錯(cuò)。以下的swap函數(shù)拿到其他程序中不能用。int a,b;main().swap( );.swap( )int c;c=a;a=b;b
4、=c;專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性全局變量與局部變量同名時(shí),全局變量被屏蔽。float x=6,y;main() int i; i=x; x=j;int j;fun2() int b,x=5; b=x+j; 這時(shí)的x是局部變量專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性全局變量與局部變量同名時(shí),全局變量被屏蔽。程序分析:int a=1;main()int a=7,b=5;fun(a+b);printf(%d,%dn,a,b);fun(int b)b=a+b;a=a*2;printf(%d,%dn,a,b
5、);2,127,5專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性全局變量與局部變量同名時(shí),全局變量被屏蔽。程序分析:int a=1;main()int a=7,b=5;while(b100)b=b*fun(+a);printf(%d,%dn,a,b);fun(int b)b=a+b;a=a*2;return(b);9,495專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性8.1.2變量的生存期變量有2種生存期:動(dòng)態(tài)存儲(chǔ):在函數(shù)被調(diào)用時(shí)分配空間,函數(shù)結(jié)束時(shí)釋放。動(dòng)態(tài)存儲(chǔ)變量定義時(shí),初值是不確定的值。靜態(tài)存儲(chǔ):在編譯時(shí)被賦初值是
6、0,在整個(gè)程序運(yùn)行時(shí)一直存在。靜態(tài)存儲(chǔ)main()fun1();fun1()int a; /*a是動(dòng)態(tài)存儲(chǔ)的變量*/fun2()static int b; /*a是靜態(tài)存儲(chǔ)的變量*/b是靜態(tài)變量,則不管函數(shù)fun2有沒(méi)有被調(diào)用,變量b都會(huì)在程序一開(kāi)始運(yùn)行時(shí)就被定義好了。并且初值是0專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性8.1.2變量的生存期main()int i;for(i=1;i=10;i+)fun1();fun2();fun1()int a;fun2()static int b;變量a,b分別被分配空間幾次?a 10次b 1次專(zhuān)升本C語(yǔ)言課件C0
7、8存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性各種變量的生存期外部變量:靜態(tài)局部變量: 動(dòng)態(tài) 局部變量(auto) 形參 函數(shù)調(diào)用時(shí)分配,并且 被賦予實(shí)參的值。 register 寄存器變量 速度較快 靜態(tài)static 靜態(tài)局部變量 既是局部變量,又是 靜態(tài)變量判斷題:(1)只要是局部變量都可以定義為寄存器變量。錯(cuò),靜態(tài)局部變量不可以。(2)用register定義100變量,其中有些變量將被分配內(nèi)存單元。對(duì)。(3)靜態(tài)局部變量定義時(shí)自動(dòng)賦初值為0對(duì)(4)外部變量不可以用auto說(shuō)明存儲(chǔ)類(lèi)型。對(duì)。(5)外部變量必然是靜態(tài)存儲(chǔ)的變量。對(duì)。(6)程序執(zhí)行到定義靜態(tài)變量時(shí),該變量被創(chuàng)建
8、,一直到程序結(jié)束。錯(cuò)。程序一開(kāi)始就已創(chuàng)建。專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性各種變量的生存期外部變量:靜態(tài)局部變量: 動(dòng)態(tài) 局部變量(auto) 形參 函數(shù)調(diào)用時(shí)分配,并且 被賦予實(shí)參的值。 register 寄存器變量 速度較快 靜態(tài)static 靜態(tài)局部變量 既是局部變量,又是 靜態(tài)變量外部變量: 定義在函數(shù)的外部int x;動(dòng)態(tài)局部變量:定義在函數(shù)內(nèi)部auto int x;或者 int x;形參:void abc(int x, char y) 。寄存器變量:定義在函數(shù)內(nèi)部register int x,y,z;靜態(tài)局部變量:定義在函數(shù)內(nèi)部st
9、atic int x;專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性各種變量的生存期外部變量:靜態(tài)局部變量: 動(dòng)態(tài) 局部變量(auto) 形參 函數(shù)調(diào)用時(shí)分配,并且 被賦予實(shí)參的值。 register 寄存器變量 速度較快 靜態(tài)static 靜態(tài)局部變量 既是局部變量,又是 靜態(tài)變量 以下程序的輸出的結(jié)果是int x=3;main() int i;for(i=1;ix;i+)incre();incre() static int x=1;x*=x+1;printf( %d,x);A) 3 3 B) 2 2 C) 2 6 D) 2 5C專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)
10、屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。(1)在一個(gè)文件內(nèi)擴(kuò)展。在外部變量的定義點(diǎn)之前的函數(shù)內(nèi),用extern聲明外部變量,就可以使用。如extern a,b;或extern int a,b;如何在main函數(shù)中使用外部變量x?main()int a;a=x+4;.int x;fun1().fun2().extern x;專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。(1)
11、在一個(gè)文件內(nèi)擴(kuò)展。(2)在多個(gè)文件擴(kuò)展。一個(gè)C程序可以由多個(gè)源文件組成,假如兩個(gè)文件共用一個(gè)外部變量x,必須在一個(gè)文件內(nèi)定義,另一個(gè)文件內(nèi)用extern聲明。文件1int x;main().fun1().文件2extern x;fun3().x+;fun2().專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。(1)在一個(gè)文件內(nèi)擴(kuò)展。(2)在多個(gè)文件擴(kuò)展。一個(gè)C程序可以由多個(gè)源文件組成,假如兩個(gè)文件共用一個(gè)外部變量x,必須在一個(gè)文件內(nèi)定義,另一個(gè)文件內(nèi)用extern聲明。(3)
12、限制外部變量只能在本文件使用。定義外部變量時(shí)可以用static。這樣外部變量就不能被其他文件引用。文件1static int x;main().fun1().文件2extern x;fun3().x+;fun2().x不能引用專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。(1)在一個(gè)文件內(nèi)擴(kuò)展。(2)在多個(gè)文件擴(kuò)展。一個(gè)C程序可以由多個(gè)源文件組成,假如兩個(gè)文件共用一個(gè)外部變量x,必須在一個(gè)文件內(nèi)定義,另一個(gè)文件內(nèi)用extern聲明。(3)限制外部變量只能在本文件使用。定義外
13、部變量時(shí)可以用static。這樣外部變量就不能被其他文件引用。假如一個(gè)程序由如下兩個(gè)文件組成,判斷以下使用是否正確?文件1static int y;extern z;extern a;int b;static int x;文件2static int y;int z;extern a;int b;extern x;YYNNN專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.1 變量的存儲(chǔ)屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。(1)在一個(gè)文件內(nèi)擴(kuò)展。(2)在多個(gè)文件擴(kuò)展。一個(gè)C程序可以由多個(gè)源文件組成,假如兩個(gè)文件共用一個(gè)外部變量x
14、,必須在一個(gè)文件內(nèi)定義,另一個(gè)文件內(nèi)用extern聲明。(3)限制外部變量只能在本文件使用。定義外部變量時(shí)可以用static。這樣外部變量就不能被其他文件引用。變量x和y有什么區(qū)別?static int x;main().fun1()static int y;.x是外部變量,但不能被其他文件引用y是靜態(tài)局部變量,只能在本函數(shù)使用專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.2 內(nèi)部函數(shù)與外部函數(shù)外部函數(shù):可以被其他文件調(diào)用。格式:extern 類(lèi)型 函數(shù)名(形參)或 類(lèi)型 函數(shù)名(形參)內(nèi)部函數(shù):一個(gè)函數(shù)只能在本文件中調(diào)用。格式:static 類(lèi)型 函數(shù)名(形參)其他文件調(diào)用
15、之前需用extern聲明文件1 文件2int fun1(int a) extern fun1(int a);. b=fun1(3);判斷題:(1)不加extern定義的函數(shù)可以被其他文件調(diào)用。(2)一個(gè)文件調(diào)用其他文件中的函數(shù)時(shí)要先聲明。(3)一個(gè)文件用extern聲明函數(shù),就可以引用其他文件中的任何函數(shù)。(4)一個(gè)文件中的各個(gè)函數(shù)要么都可以被其他文件調(diào)用,要么都不可以。YYNN專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.3 宏定義C語(yǔ)言中的一些操作稱(chēng)為編譯預(yù)處理:宏定義,文件包含,條件編譯。編譯預(yù)處理是在編譯之前進(jìn)行。預(yù)處理命令以#開(kāi)頭,一般不加分號(hào)。宏定義有2種:(1)
16、不帶參數(shù)的宏定義#define PI 3.1415926(2)帶參數(shù)的宏定義#define S(u,v) u*v替換時(shí)宏和參數(shù)都要進(jìn)行替換。宏替換時(shí)不進(jìn)行語(yǔ)法分析。分析結(jié)果#define MU(a,b) b-amain()int x=4,y=2;x=MU(y*2,3);y=MU(x,y)*4;printf(%d,y);在運(yùn)行之前先要進(jìn)行宏替換x=3-y*2;y=y-x*4;專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.3 宏定義宏的優(yōu)點(diǎn):(1)速度比函數(shù)快。(2)不受數(shù)據(jù)類(lèi)型限制。(3)不受返回值個(gè)數(shù)限制。宏的缺點(diǎn):(1)功能有限。(2)源程序變長(zhǎng)。(3)容易出錯(cuò)。分析結(jié)果#
17、define s) a=a+b;b=a-b;a=a-b;main()int x=4,y=2;float u=2.5,v=-3.3;s); /*不受返回值個(gè)數(shù)限制*/s); /*不受數(shù)據(jù)類(lèi)型限制 */.專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.4 文件包含將另一個(gè)源文件的內(nèi)容包含到本文件中。#include 文件名先在當(dāng)前目錄找,再到存放庫(kù)函數(shù)頭文件的目錄中查找。#include 僅在存放庫(kù)函數(shù)頭文件的目錄中查找。專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.4 條件編譯條件編譯是為了加強(qiáng)程序的可移植性。#ifdef 標(biāo)識(shí)符 程序段1#else 程序段2#endif如果之前標(biāo)識(shí)符已被#define定義過(guò),則編譯程序段1,否則編譯程序段2。#define computer 0.#ifdef computer#define INTEGER_SIZE 16#else#define INTEGER_SIZE 32#endif專(zhuān)升本C語(yǔ)言課件C08存儲(chǔ)屬性及預(yù)處理八 存儲(chǔ)屬性及預(yù)處理 8.4 條件編譯條件編譯的優(yōu)點(diǎn)是代碼較短運(yùn)行稍快#ifdef 標(biāo)識(shí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 團(tuán)委干部培訓(xùn)
- 中醫(yī)心肌梗塞護(hù)理
- DB43-T 2871-2023 農(nóng)貿(mào)市場(chǎng)食品安全管理技術(shù)規(guī)范
- 一年級(jí)數(shù)學(xué)下冊(cè)期末測(cè)試卷A(含答案)
- 滴滴代駕服務(wù)課件
- 幼兒園小班社會(huì)衣服會(huì)說(shuō)話教案
- 多益校招java面試題及答案
- 家庭教育的小講座
- 融創(chuàng)傳奇面試題及答案
- 滋養(yǎng)細(xì)胞疾病護(hù)理常規(guī)
- 知識(shí)產(chǎn)權(quán)培訓(xùn)課件亞馬遜
- 病媒生物防治試題及答案
- 全屋智能合同樣本
- 城市居住區(qū)規(guī)劃設(shè)計(jì)規(guī)范
- 基于UHPC的蝶形腹板混凝土拱橋創(chuàng)新設(shè)計(jì)研究
- 口腔科針刺傷處理流程
- 互聯(lián)網(wǎng)居家護(hù)理服務(wù)匯報(bào)
- 臨時(shí)占地免責(zé)協(xié)議書(shū)
- 樹(shù)脂瓦施工方案
- 檔案管理員實(shí)操能力考試題試題及答案
- 2025年工會(huì)知識(shí)競(jìng)賽題庫(kù)200題及答案(完整版)
評(píng)論
0/150
提交評(píng)論