專升本C語言C08存儲屬性及預(yù)處理ppt課件_第1頁
專升本C語言C08存儲屬性及預(yù)處理ppt課件_第2頁
專升本C語言C08存儲屬性及預(yù)處理ppt課件_第3頁
專升本C語言C08存儲屬性及預(yù)處理ppt課件_第4頁
專升本C語言C08存儲屬性及預(yù)處理ppt課件_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、C程序設(shè)計八 存儲屬性及預(yù)處置 八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性8.1.1變量的作用域變量有兩個方面的屬性:數(shù)據(jù)類型和存儲類別變量的存儲屬性指:變量的作用域和生存期。作用域有2種:部分變量:在函數(shù)內(nèi)有效定義在函數(shù)內(nèi)或方式參數(shù)全局變量:從定義點到文件的結(jié)尾有效。定義在函數(shù)外,又稱外部變量留意分析作用域時不涉及程序運轉(zhuǎn)的流程。以下哪些是部分變量,哪些是全局變量?判別劃線語句能否正確。float x=6,y;main() int i; i=x; x=j;int j;fun1(int *p) int a; a=i*2; fun2() int b; b=x+j;對錯錯對八 存儲屬性及預(yù)處置

2、8.1 變量的存儲屬性全局變量的作用:1可以從函數(shù)得到多個前往值。2簡化形參。下面程序采用全局變量得到多個值int a,b;main().swap( );.swap( )int c;c=a;a=b;b=c;八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性全局變量的作用:1可以從函數(shù)得到多個前往值。2簡化形參。比較如下的兩個程序:采用全局變量可以簡化形參。main().fun1(a,b,p);fun2(a,b,p,4);.fun1(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;ma

3、in().fun1();fun2(4);.fun1().fun2(int n).fun1();.八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性全局變量的作用:1可以從函數(shù)得到多個前往值。2簡化形參。全局變量的缺陷:使函數(shù)的通用性降低。程序容易出錯。以下的swap函數(shù)拿到其他程序中不能用。int a,b;main().swap( );.swap( )int c;c=a;a=b;b=c;八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性全局變量與部分變量同名時,全局變量被屏蔽。float x=6,y;main() int i; i=x; x=j;int j;fun2() int b,x=5; b=x+j;

4、 這時的x是部分變量八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性全局變量與部分變量同名時,全局變量被屏蔽。程序分析: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);2,127,5八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性全局變量與部分變量同名時,全局變量被屏蔽。程序分析: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;re

5、turn(b);9,495八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性8.1.2變量的生存期變量有2種生存期:動態(tài)存儲:在函數(shù)被調(diào)用時分配空間,函數(shù)終了時釋放。動態(tài)存儲變量定義時,初值是不確定的值。靜態(tài)存儲:在編譯時被賦初值是0,在整個程序運轉(zhuǎn)時不斷存在。靜態(tài)存儲main()fun1();fun1()int a; /*a是動態(tài)存儲的變量*/fun2()static int b; /*a是靜態(tài)存儲的變量*/b是靜態(tài)變量,那么不論函數(shù)fun2有沒有被調(diào)用,變量b都會在程序一開場運轉(zhuǎn)時就被定義好了。并且初值是0八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性8.1.2變量的生存期main()int i;

6、for(i=1;i=10;i+)fun1();fun2();fun1()int a;fun2()static int b;變量a,b分別被分配空間幾次?a 10次b 1次八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性各種變量的生存期外部變量:靜態(tài)部分變量: 動態(tài) 部分變量(auto) 形參 函數(shù)調(diào)用時分配,并且 被賦予實參的值。 register 存放器變量 速度較快 靜態(tài)static 靜態(tài)部分變量 既是部分變量,又是 靜態(tài)變量判別題:1只需是部分變量都可以定義為存放器變量。錯,靜態(tài)部分變量不可以。2用register定義100變量,其中有些變量將被分配內(nèi)存單元。對。3靜態(tài)部分變量定義時自動賦初

7、值為0對4外部變量不可以用auto闡明存儲類型。對。5外部變量必然是靜態(tài)存儲的變量。對。6程序執(zhí)行到定義靜態(tài)變量時,該變量被創(chuàng)建,不斷到程序終了。錯。程序一開場就已創(chuàng)建。八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性各種變量的生存期外部變量:靜態(tài)部分變量: 動態(tài) 部分變量(auto) 形參 函數(shù)調(diào)用時分配,并且 被賦予實參的值。 register 存放器變量 速度較快 靜態(tài)static 靜態(tài)部分變量 既是部分變量,又是 靜態(tài)變量外部變量: 定義在函數(shù)的外部int x;動態(tài)部分變量:定義在函數(shù)內(nèi)部auto int x;或者 int x;形參:void abc(int x, char y) 。存放器

8、變量:定義在函數(shù)內(nèi)部register int x,y,z;靜態(tài)部分變量:定義在函數(shù)內(nèi)部static int x;八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性各種變量的生存期外部變量:靜態(tài)部分變量: 動態(tài) 部分變量(auto) 形參 函數(shù)調(diào)用時分配,并且 被賦予實參的值。 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

9、) 2 6 D) 2 5C八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。1在一個文件內(nèi)擴(kuò)展。在外部變量的定義點之前的函數(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;八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。1在一個文件內(nèi)擴(kuò)展。2在多個文件擴(kuò)

10、展。一個C程序可以由多個源文件組成,假設(shè)兩個文件共用一個外部變量x,必需在一個文件內(nèi)定義,另一個文件內(nèi)用extern聲明。文件1int x;main().fun1().文件2extern x;fun3().x+;fun2().八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。1在一個文件內(nèi)擴(kuò)展。2在多個文件擴(kuò)展。一個C程序可以由多個源文件組成,假設(shè)兩個文件共用一個外部變量x,必需在一個文件內(nèi)定義,另一個文件內(nèi)用extern聲明。3限制外部變量只能在本文件運用。定義外部變量時可以用static。這樣外部變量就不能被其

11、他文件援用。文件1static int x;main().fun1().文件2extern x;fun3().x+;fun2().x不能援用八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。1在一個文件內(nèi)擴(kuò)展。2在多個文件擴(kuò)展。一個C程序可以由多個源文件組成,假設(shè)兩個文件共用一個外部變量x,必需在一個文件內(nèi)定義,另一個文件內(nèi)用extern聲明。3限制外部變量只能在本文件運用。定義外部變量時可以用static。這樣外部變量就不能被其他文件援用。假設(shè)一個程序由如下兩個文件組成,判別以下運用能否正確?文件1static

12、int y;extern z;extern a;int b;static int x;文件2static int y;int z;extern a;int b;extern x;YYNNN八 存儲屬性及預(yù)處置 8.1 變量的存儲屬性8.1.3 擴(kuò)展外部變量的作用域用extern聲明外部變量,可以擴(kuò)展外部變量的作用域。1在一個文件內(nèi)擴(kuò)展。2在多個文件擴(kuò)展。一個C程序可以由多個源文件組成,假設(shè)兩個文件共用一個外部變量x,必需在一個文件內(nèi)定義,另一個文件內(nèi)用extern聲明。3限制外部變量只能在本文件運用。定義外部變量時可以用static。這樣外部變量就不能被其他文件援用。變量x和y有什么區(qū)別?st

13、atic int x;main().fun1()static int y;.x是外部變量,但不能被其他文件援用y是靜態(tài)部分變量,只能在本函數(shù)運用八 存儲屬性及預(yù)處置 8.2 內(nèi)部函數(shù)與外部函數(shù)外部函數(shù):可以被其他文件調(diào)用。格式:extern 類型 函數(shù)名形參或 類型 函數(shù)名形參內(nèi)部函數(shù):一個函數(shù)只能在本文件中調(diào)用。格式:static 類型 函數(shù)名形參其他文件調(diào)用之前需用extern聲明文件1 文件2int fun1(int a) extern fun1(int a);. b=fun1(3);判別題:1不加extern定義的函數(shù)可以被其他文件調(diào)用。2一個文件調(diào)用其他文件中的函數(shù)時要先聲明。3一個

14、文件用extern聲明函數(shù),就可以援用其他文件中的任何函數(shù)。4一個文件中的各個函數(shù)要么都可以被其他文件調(diào)用,要么都不可以。YYNN八 存儲屬性及預(yù)處置 8.3 宏定義C言語中的一些操作稱為編譯預(yù)處置:宏定義,文件包含,條件編譯。編譯預(yù)處置是在編譯之前進(jìn)展。預(yù)處置命令以#開頭,普通不加分號。宏定義有2種:1不帶參數(shù)的宏定義#define PI 3.14159262帶參數(shù)的宏定義#define S(u,v) u*v交換時宏和參數(shù)都要進(jìn)展交換。宏交換時不進(jìn)展語法分析。分析結(jié)果#define MU(a,b) b-amain()int x=4,y=2;x=MU(y*2,3);y=MU(x,y)*4;pr

15、intf(%d,y);在運轉(zhuǎn)之前先要進(jìn)展宏交換x=3-y*2;y=y-x*4;八 存儲屬性及預(yù)處置 8.3 宏定義宏的優(yōu)點:1速度比函數(shù)快。2不受數(shù)據(jù)類型限制。3不受前往值個數(shù)限制。宏的缺陷:1功能有限。2源程序變長。3容易出錯。分析結(jié)果#define swap(a,b) a=a+b;b=a-b;a=a-b;main()int x=4,y=2;float u=2.5,v=-3.3;swap(x,y); /*不受前往值個數(shù)限制*/swap(u,v); /*不受數(shù)據(jù)類型限制 */.八 存儲屬性及預(yù)處置 8.4 文件包含將另一個源文件的內(nèi)容包含到本文件中。#include 文件名先在當(dāng)前目錄找,再到存放庫函數(shù)頭文件的目錄中查找。#include 僅在存放庫函數(shù)頭文件的目錄中查找。八 存儲屬性及預(yù)處置 8.4 條件編譯條件編譯是為了加強(qiáng)程序的可移植性。#ifdef 標(biāo)識符 程序段1#else 程序段2#endif假設(shè)之前標(biāo)識符已被#define定義過,那么編譯程序段1,否那么編譯程序段2。#define computer 0.#ifdef computer#define INTEGER_SIZE 16#else#define INTEGER_SIZE 32#endif八 存儲屬性及預(yù)處置 8.4 條件編譯條件編譯的優(yōu)點是代碼較短運轉(zhuǎn)稍快#ifdef 標(biāo)識符 程序段1#els

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論