![專升本C語言課件C08存儲屬性及預(yù)處理課件_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/e4b1d814-4d63-438a-a51d-445e5fc581f8/e4b1d814-4d63-438a-a51d-445e5fc581f81.gif)
![專升本C語言課件C08存儲屬性及預(yù)處理課件_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/e4b1d814-4d63-438a-a51d-445e5fc581f8/e4b1d814-4d63-438a-a51d-445e5fc581f82.gif)
![專升本C語言課件C08存儲屬性及預(yù)處理課件_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/e4b1d814-4d63-438a-a51d-445e5fc581f8/e4b1d814-4d63-438a-a51d-445e5fc581f83.gif)
![專升本C語言課件C08存儲屬性及預(yù)處理課件_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/e4b1d814-4d63-438a-a51d-445e5fc581f8/e4b1d814-4d63-438a-a51d-445e5fc581f84.gif)
![專升本C語言課件C08存儲屬性及預(yù)處理課件_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/e4b1d814-4d63-438a-a51d-445e5fc581f8/e4b1d814-4d63-438a-a51d-445e5fc581f85.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、專升本C語言課件C08存儲屬性及預(yù)處理C程序設(shè)計(jì)八 存儲屬性及預(yù)處理 專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性8.1.1變量的作用域變量有兩個(gè)方面的屬性:數(shù)據(jù)類型和存儲類別變量的存儲屬性指:變量的作用域和生存期。作用域有2種:局部變量:在函數(shù)內(nèi)有效(定義在函數(shù)內(nèi)或形式參數(shù))全局變量:從定義點(diǎn)到文件的結(jié)尾有效。(定義在函數(shù)外,又稱外部變量)注意分析作用域時(shí)不涉及程序運(yùn)行的流程。以下哪些是局部變量,哪些是全局變量?判斷劃線語句是否正確。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;對錯(cuò)錯(cuò)對專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性全局變量的作用:(1)可以從函數(shù)得到多個(gè)返回值。(2)簡化形參。下面程序采用全局變量得到多個(gè)值int a,b;main().swap( );.swap( )int c;c=a;a=b;b=c;專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性全局變量的作用:(1)可以從函數(shù)得到多個(gè)返回值。(2)簡化形參。比較如下的兩個(gè)程序:采用全局變量可以簡化形參。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();.專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性全局變量的作用:(1)可以從函數(shù)得到多個(gè)返回值。(2)簡化形參。全局變量的缺點(diǎn):使函數(shù)的通用性降低。程序容易出錯(cuò)。以下的swap函數(shù)拿到其他程序中不能用。int a,b;main().swap( );.swap( )int c;c=a;a=b;b
4、=c;專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性全局變量與局部變量同名時(shí),全局變量被屏蔽。float x=6,y;main() int i; i=x; x=j;int j;fun2() int b,x=5; b=x+j; 這時(shí)的x是局部變量專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性全局變量與局部變量同名時(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專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性全局變量與局部變量同名時(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專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性8.1.2變量的生存期變量有2種生存期:動(dòng)態(tài)存儲:在函數(shù)被調(diào)用時(shí)分配空間,函數(shù)結(jié)束時(shí)釋放。動(dòng)態(tài)存儲變量定義時(shí),初值是不確定的值。靜態(tài)存儲:在編譯時(shí)被賦初值是
6、0,在整個(gè)程序運(yùn)行時(shí)一直存在。靜態(tài)存儲main()fun1();fun1()int a; /*a是動(dòng)態(tài)存儲的變量*/fun2()static int b; /*a是靜態(tài)存儲的變量*/b是靜態(tài)變量,則不管函數(shù)fun2有沒有被調(diào)用,變量b都會在程序一開始運(yùn)行時(shí)就被定義好了。并且初值是0專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性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次專升本C語言課件C0
7、8存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性各種變量的生存期外部變量:靜態(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)存單元。對。(3)靜態(tài)局部變量定義時(shí)自動(dòng)賦初值為0對(4)外部變量不可以用auto說明存儲類型。對。(5)外部變量必然是靜態(tài)存儲的變量。對。(6)程序執(zhí)行到定義靜態(tài)變量時(shí),該變量被創(chuàng)建
8、,一直到程序結(jié)束。錯(cuò)。程序一開始就已創(chuàng)建。專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性各種變量的生存期外部變量:靜態(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;專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性各種變量的生存期外部變量:靜態(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專升本C語言課件C08存儲
10、屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性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;專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性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().專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性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不能引用專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性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專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.1 變量的存儲屬性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ù)使用專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.2 內(nèi)部函數(shù)與外部函數(shù)外部函數(shù):可以被其他文件調(diào)用。格式:extern 類型 函數(shù)名(形參)或 類型 函數(shù)名(形參)內(nèi)部函數(shù):一個(gè)函數(shù)只能在本文件中調(diào)用。格式:static 類型 函數(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專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.3 宏定義C語言中的一些操作稱為編譯預(yù)處理:宏定義,文件包含,條件編譯。編譯預(yù)處理是在編譯之前進(jìn)行。預(yù)處理命令以#開頭,一般不加分號。宏定義有2種:(1)
16、不帶參數(shù)的宏定義#define PI 3.1415926(2)帶參數(shù)的宏定義#define S(u,v) u*v替換時(shí)宏和參數(shù)都要進(jìn)行替換。宏替換時(shí)不進(jìn)行語法分析。分析結(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;專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.3 宏定義宏的優(yōu)點(diǎn):(1)速度比函數(shù)快。(2)不受數(shù)據(jù)類型限制。(3)不受返回值個(gè)數(shù)限制。宏的缺點(diǎn):(1)功能有限。(2)源程序變長。(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ù)類型限制 */.專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.4 文件包含將另一個(gè)源文件的內(nèi)容包含到本文件中。#include 文件名先在當(dāng)前目錄找,再到存放庫函數(shù)頭文件的目錄中查找。#include 僅在存放庫函數(shù)頭文件的目錄中查找。專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.4 條件編譯條件編譯是為了加強(qiáng)程序的可移植性。#ifdef 標(biāo)識符 程序段1#else 程序段2#endif如果之前標(biāo)識符已被#define定義過,則編譯程序段1,否則編譯程序段2。#define computer 0.#ifdef computer#define INTEGER_SIZE 16#else#define INTEGER_SIZE 32#endif專升本C語言課件C08存儲屬性及預(yù)處理八 存儲屬性及預(yù)處理 8.4 條件編譯條件編譯的優(yōu)點(diǎn)是代碼較短運(yùn)行稍快#ifdef 標(biāo)識
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球核電用鋼管行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國鋼制垂直推拉門行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球微孔織物行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球半導(dǎo)體電鍍前處理劑行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球熱水箱行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國手機(jī)支付安全行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國超高壓HPP滅菌設(shè)備行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 液氨運(yùn)輸合同模板
- 2025員工入股合同(美容美發(fā))
- 外墻保溫勞務(wù)分包合同
- Unit6AtthesnackbarStorytimeDiningwithdragons(課件)譯林版英語四年級上冊
- 2023年四川省公務(wù)員錄用考試《行測》真題卷及答案解析
- 機(jī)電一體化系統(tǒng)設(shè)計(jì)-第5章-特性分析
- 2025年高考物理復(fù)習(xí)壓軸題:電磁感應(yīng)綜合問題(原卷版)
- 雨棚鋼結(jié)構(gòu)施工組織設(shè)計(jì)正式版
- 醫(yī)院重點(diǎn)監(jiān)控藥品管理制度
- 2024尼爾森IQ中國本土快消企業(yè)調(diào)研報(bào)告
- 2024年印度辣椒行業(yè)狀況及未來發(fā)展趨勢報(bào)告
- 骨科醫(yī)院感染控制操作流程
- 鑄鋁焊接工藝
- 《社區(qū)康復(fù)》課件-第六章 骨關(guān)節(jié)疾病、損傷患者的社區(qū)康復(fù)實(shí)踐
評論
0/150
提交評論