版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2021/8/14李松綠李松綠延邊科學(xué)技術(shù)大學(xué)- 第五章 變量的儲(chǔ)存類型2021/8/142目錄目錄o 變量的儲(chǔ)存類型變量的儲(chǔ)存類型o 自動(dòng)型變量自動(dòng)型變量o 靜態(tài)型變量靜態(tài)型變量o 寄存器型變量寄存器型變量o 外部參照型變量外部參照型變量2021/8/1431. 變量的儲(chǔ)存類型變量的儲(chǔ)存類型o 可以存放數(shù)據(jù)的空間可以存放數(shù)據(jù)的空間n 計(jì)算機(jī)的寄存器n 內(nèi)存o一般數(shù)據(jù)區(qū)o堆棧區(qū)o 儲(chǔ)存類型儲(chǔ)存類型n 用戶可以通過定義變量的儲(chǔ)存類型來選擇變量的儲(chǔ)存地點(diǎn)2021/8/1441. 變量的儲(chǔ)存類型變量的儲(chǔ)存類型o 變量的儲(chǔ)存類型變量的儲(chǔ)存類型YBUSTYBUST4分類分類儲(chǔ)存地址儲(chǔ)存地址生存期生存期適
2、用范圍適用范圍auto自動(dòng)型stack內(nèi)存堆棧區(qū)暫時(shí)性只適用于變量定義的域內(nèi)static靜態(tài)型一般內(nèi)存數(shù)據(jù)區(qū)永久性只適用于變量定義的域內(nèi),但在域外仍能保存其變量值register寄存器型CPU的通用寄存器暫時(shí)性只適用于變量定義的域內(nèi)extern外部參照型一般內(nèi)存數(shù)據(jù)區(qū)永久性適用于程序的所有文件2021/8/145目錄目錄o 變量的儲(chǔ)存類型變量的儲(chǔ)存類型o 自動(dòng)型變量自動(dòng)型變量o 靜態(tài)型變量靜態(tài)型變量o 寄存器型變量寄存器型變量o 外部參照型變量外部參照型變量2021/8/1462. 自動(dòng)型變量自動(dòng)型變量o 自動(dòng)型變量自動(dòng)型變量(automatic variable) n 又稱堆棧型,分配在內(nèi)存
3、的堆棧區(qū)o 堆棧區(qū)stack領(lǐng)域o 儲(chǔ)存方式- LIFO(last in first out)n 只適用于函數(shù)內(nèi)部或函數(shù)的特定域內(nèi) o local variablen 工作原理o 執(zhí)行:調(diào)用函數(shù)時(shí),將在堆棧區(qū)給變量分配內(nèi)存o 結(jié)束:結(jié)束函數(shù)時(shí),收回分配給該變量的內(nèi)存2021/8/1472. 自動(dòng)型變量自動(dòng)型變量o 堆棧區(qū)堆棧區(qū)(stack)的原理的原理 - PUSHYBUSTYBUST71020103020102030堆棧區(qū)領(lǐng)域PUSH 10PUSH 30PUSH 20102021/8/1482. 自動(dòng)型變量自動(dòng)型變量o 堆棧區(qū)堆棧區(qū)(stack)的原理的原理 - POPYBUSTYBUST8
4、201020POP 2030102030POP 3010POP 10102021/8/1492. 自動(dòng)型變量自動(dòng)型變量o形式形式n(auto) 數(shù)據(jù)類型 變量1, 變量2, ;n(auto) 數(shù)據(jù)類型 變量1=常數(shù)1, 變量2=常數(shù)2, ;o特征特征n定義在函數(shù)內(nèi)部n執(zhí)行完后,自動(dòng)消失n定義自動(dòng)型數(shù)組變量時(shí),不能同時(shí)賦予初始值n沒有給自動(dòng)型變量賦予初始值的時(shí)候,無法確認(rèn)其變量值o這樣的狀態(tài)叫 garbagen省略auto時(shí),程序照樣識(shí)別成自動(dòng)型變量n利用自動(dòng)型變量可以節(jié)省內(nèi)存空間YBUSTYBUST92021/8/14102. 自動(dòng)型變量自動(dòng)型變量o 例例1YBUSTYBUST10main()
5、 auto int a, b; auto float c=3.1415; char d, e;定義自動(dòng)型變量定義自動(dòng)型變量賦予初始值賦予初始值省略省略auto也能被識(shí)別成自動(dòng)型變量也能被識(shí)別成自動(dòng)型變量跳出函數(shù)域跳出函數(shù)域( )時(shí),變量會(huì)自動(dòng)消失時(shí),變量會(huì)自動(dòng)消失2021/8/14112. 自動(dòng)型變量自動(dòng)型變量o 例例2YBUSTYBUST11main() auto int a10; float b5;定義整型數(shù)組定義整型數(shù)組 a0, a1, , a9定義省略定義省略auto的實(shí)型數(shù)組的實(shí)型數(shù)組 b0, b1, , b4定義自動(dòng)型變量數(shù)組時(shí),不能同時(shí)賦予初始值定義自動(dòng)型變量數(shù)組時(shí),不能同時(shí)賦予
6、初始值2021/8/1412o Program 5 .12. 自動(dòng)型變量自動(dòng)型變量#include main() int a=10; printf(“main-a=%d n“, a); sub(); printf(“main-a=%d n”, a);sub() int a=20; printf(“sub-a=%d n”, a);main-a=10sub-a=20main-a=102021/8/1413YBUSTYBUST13o Program 5 .22. 自動(dòng)型變量自動(dòng)型變量#include main() int a=35; if (a 10) int a=30; printf(“(1) a
7、=%d n”, a); printf(“(2) a=%d n”, a); a=30 a=352021/8/1414YBUSTYBUST14o Program 5 .32. 自動(dòng)型變量自動(dòng)型變量#include main() auto int a; auto int b; printf(“a=%dn”, a); printf(“b=%dn”, b);a=208b=02021/8/1415YBUSTYBUST15o Program 5 .42. 自動(dòng)型變量自動(dòng)型變量#include main() int a=10; int b=40; int a=20; int a=30; printf(“Blo
8、ck(3) a=%d n”, a); printf(“Block(1) b=%d n”, b); printf(“Block(2) a=%d n”, a); printf(“Block(1) a=%d n”, a);Block(3) a=30Block(1) b=40Block(2) a=20Block(1) a=102021/8/1416目錄目錄o 變量的儲(chǔ)存類型變量的儲(chǔ)存類型o 自動(dòng)型變量自動(dòng)型變量o 靜態(tài)型變量靜態(tài)型變量o 寄存器型變量寄存器型變量o 外部參照型變量外部參照型變量2021/8/14173. 靜態(tài)型變量靜態(tài)型變量o 靜態(tài)型變量靜態(tài)型變量(static variable)n分
9、配在內(nèi)存的數(shù)據(jù)區(qū)中o外部靜態(tài)型變量,內(nèi)部靜態(tài)型變量n工作原理o第一次調(diào)用函數(shù)時(shí)分配內(nèi)存o調(diào)用結(jié)束時(shí)并不回收內(nèi)存,而是繼續(xù)保留其中的值o第二次調(diào)用函數(shù)時(shí)將不再分配內(nèi)存o上次調(diào)用函數(shù)結(jié)束時(shí)保留的值可以繼續(xù)使用o只有程序運(yùn)行結(jié)束后,才釋放所占用的內(nèi)存n形式ostatic 數(shù)據(jù)類型 變量1, 變量2, ;2021/8/14183. 靜態(tài)型變量靜態(tài)型變量o 例例1 1YBUST18static int a=10, b=20;main() static float c, d, e;外部靜態(tài)型變量外部靜態(tài)型變量?jī)?nèi)部靜態(tài)型變量?jī)?nèi)部靜態(tài)型變量2021/8/14193. 靜態(tài)型變量靜態(tài)型變量o 例例2 2YBUS
10、T19static int a;main() sub() sub() static int b; 外部靜態(tài)型變量外部靜態(tài)型變量 內(nèi)部靜態(tài)型變量?jī)?nèi)部靜態(tài)型變量2021/8/1420o Program 5.53. 靜態(tài)型變量靜態(tài)型變量#include main() static int a=10; a = a+1; printf(“(1) a=%d n”, a); a = a+1; printf(“(2) a=%d n”, a); a = a+1; printf(“(3) a=Td n”, a);(1) a=11(2) a=12(3) a=132021/8/1421YBUSTYBUST21o Pr
11、ogram 5.63. 靜態(tài)型變量靜態(tài)型變量#include main() int c; printf(“ static var. auto var. n”); printf(“= n”); for(c=0; c3; c=c+1) sub();sub() static int a =20; auto int b=20; printf(“ a = %d b = %d n”, a, b); a = a+1; b = b+1;static var. auto var.= a = 20 b = 20 a = 21 b = 20 a = 22 b = 202021/8/1422YBUSTYBUST22o
12、 Program 5.73. 靜態(tài)型變量靜態(tài)型變量#include static int a=20;sub1() a = a+1; printf(“sub(1) a=%d n”, a); sub2() a = a+1; printf(“sub(2) a=%d n”, a);main() a = a+1; printf(“main() a=%d n”, a); sub1(); sub2();main() a = 21sub(1) a=22sub(2) a = 232021/8/1423YBUSTYBUST23o Program 5.83. 靜態(tài)型變量靜態(tài)型變量#include static in
13、t a;main() static int b; a = 30; b = 10; printf(“b=%d n”, b); sub();sub() a = a+5; printf(“a=%d n”, a);b=10a=352021/8/1424目錄目錄o 變量的儲(chǔ)存類型變量的儲(chǔ)存類型o 自動(dòng)型變量自動(dòng)型變量o 靜態(tài)型變量靜態(tài)型變量o 寄存器型變量寄存器型變量o 外部參照型變量外部參照型變量2021/8/14254. 寄存器型變量寄存器型變量o 寄存器型變量寄存器型變量(register variable)n 分配在CPU的通用寄存器中,便于高速運(yùn)算n 數(shù)量及大小o由于CPU的通用寄存器數(shù)量有限
14、,一般最多定義13個(gè)o如果定義數(shù)目過多,則會(huì)自動(dòng)將超出的變量設(shè)為自動(dòng)型變量o不能定義占用字節(jié)數(shù)多的變量,如long, float, doubleo只允許int, char, short, 指針型變量n 內(nèi)存的分配和回收o與自動(dòng)型變量相同n 形式: register 數(shù)據(jù)類型 變量1, 變量2, ;2021/8/14264. 寄存器型變量寄存器型變量o 例例YBUSTYBUST26register int r1, r2;register r1, r2;register char a, b;register int *a;定義整型寄存器型變量定義整型寄存器型變量可以省略可以省略int定義字符型寄存
15、器型變量定義字符型寄存器型變量定義指針型定義指針型(pointer)寄存器型變量寄存器型變量2021/8/1427YBUSTYBUST27o Program 5.94. 寄存器型變量寄存器型變量#include void main() register int a, b, c; a = 20; b = 30; c = a+b; printf(“a=%d n”, a); printf(“b=%d n”, b); printf(“c=%d n”, c);a=20b=30c=502021/8/1428YBUSTYBUST28o Program 5.104. 寄存器型變量寄存器型變量#include
16、void main() register a, b; for(a=1; a=5; a+) for(b=1; b=5; b+) if (a = 3) printf(“%d * %d = %d n”, a, b, a*b); 3 * 1 = 33 * 2 = 63 * 3 = 93 * 4 = 123 * 5 = 152021/8/1429YBUSTYBUST29o Program 5.114. 寄存器型變量寄存器型變量void main() register int a = 10; register a = 20; register a = 30; printf(“a=%d n”, a); pr
17、intf(“a=%d n”, a); printf(“a=%d n”, a);a=30a=20a=102021/8/1430YBUSTYBUST30o Program 5.124. 寄存器型變量寄存器型變量#include void main() register a; int *p; p = &a; printf(“address a=%x n”, p);程序有錯(cuò)誤,不程序有錯(cuò)誤,不能執(zhí)行程序能執(zhí)行程序說明說明: register變量不變量不支持地址支持地址&運(yùn)算運(yùn)算2021/8/1431目錄目錄o 變量的儲(chǔ)存類型變量的儲(chǔ)存類型o 自動(dòng)型變量自動(dòng)型變量o 靜態(tài)型變量靜態(tài)型變量
18、o 寄存器型變量寄存器型變量o 外部參照型變量外部參照型變量2021/8/14325. 外部參照型變量外部參照型變量o 外部參照型變量外部參照型變量(external variable) n 工作原理和特征o必須先在函數(shù)外面定義變量,后用extern表明要參照此變量o一旦定義成外部參照型變量,可以在其他源程序文件參照此變量o變量中的值將保留到程序結(jié)束為止n形式: extern 數(shù)據(jù)類型 變量1, 變量2, ;2021/8/14335. 外部參照型變量外部參照型變量o 例例1YBUSTYBUST33int a=10;main() extern int a; printf(“a=%dn”, a);
19、定義外部參照型變量定義外部參照型變量參照變量參照變量2021/8/14345. 外部參照型變量外部參照型變量o 例例2YBUSTYBUST34int a=10main() int a=20; printf(“a=%dn”, a);定義外部參照型變量定義外部參照型變量自動(dòng)型變量自動(dòng)型變量 (auto variable)2021/8/1435YBUSTYBUST35o Program 5.135. 外部參照型變量外部參照型變量#include int i=100;void main() extern int i; printf(“i=%d n”, i); int i=200; printf(“i=%d n”, i); sub(); printf(“i=%d n”, i);sub() extern int i; i = i + 1;i=100i=200i=1012021/8/1436YBUSTYBUST36o Program 5.145. 外部參照型變量外部參照型變量#include int i=100;void main() printf(“i +
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 18216.11-2024交流1 000 V和直流1 500 V及以下低壓配電系統(tǒng)電氣安全防護(hù)措施的試驗(yàn)、測(cè)量或監(jiān)控設(shè)備第11部分:TT、TN和IT系統(tǒng)中剩余電流監(jiān)視器(RCM)的有效性
- 專業(yè)器械保養(yǎng)及維修協(xié)議(2024年度)版B版
- 2024簡(jiǎn)易版?zhèn)€人房屋租賃協(xié)議模板版B版
- 2024年度教育居間服務(wù)協(xié)議范本3篇
- 2024年版電力供應(yīng)與需求側(cè)管理合同
- 2024年適用大額融資居間協(xié)議法律文本版B版
- 互聯(lián)網(wǎng)網(wǎng)絡(luò)使用安全講座
- 6 生物的變異 說課稿-2024-2025學(xué)年科學(xué)六年級(jí)上冊(cè)蘇教版
- 2024年環(huán)保型電動(dòng)汽車研發(fā)與生產(chǎn)合同
- 職業(yè)學(xué)院橫向課題申請(qǐng)書
- 第一單元:復(fù)習(xí)與提高(單元復(fù)習(xí)講義)-滬教版五年級(jí)數(shù)學(xué)下冊(cè)
- 國(guó)土空間規(guī)劃用途管制實(shí)施與研究
- 2024年江蘇省中考英語(yǔ)試卷十一套合卷附答案
- 《風(fēng)力發(fā)電技術(shù)》課件-第六章 風(fēng)力發(fā)電技術(shù)
- 智慧康養(yǎng)社區(qū)項(xiàng)目資金申請(qǐng)報(bào)告-超長(zhǎng)期特別國(guó)債投資專項(xiàng)
- 高技能公共實(shí)訓(xùn)基地建設(shè)方案
- DL∕T 1732-2017 電力物聯(lián)網(wǎng)傳感器信息模型規(guī)范
- 混凝土股東合同范本
- GB/T 28294-2024鋼鐵渣復(fù)合料
- 財(cái)務(wù)EXCEL操作技巧培訓(xùn)
- 芳香療法服務(wù)行業(yè)發(fā)展趨勢(shì)及前景展望分析報(bào)告
評(píng)論
0/150
提交評(píng)論