C語言程序設(shè)計:講座 03-21(2)_第1頁
C語言程序設(shè)計:講座 03-21(2)_第2頁
C語言程序設(shè)計:講座 03-21(2)_第3頁
C語言程序設(shè)計:講座 03-21(2)_第4頁
C語言程序設(shè)計:講座 03-21(2)_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1 常量與變量常量與變量定義符號常量定義符號常量整型常量整型常量實型常量實型常量整型變量整型變量實型變量實型變量先定義后使用先定義后使用變量名,也是一種標(biāo)識符,只能由字母、數(shù)變量名,也是一種標(biāo)識符,只能由字母、數(shù)字和下劃線組成,以字母或下劃線開頭。字和下劃線組成,以字母或下劃線開頭。2 3.3變量變量根據(jù)變量所持有的數(shù)據(jù)的性質(zhì)不同,而分為各種數(shù)據(jù)類型;根據(jù)變量所持有的數(shù)據(jù)的性質(zhì)不同,而分為各種數(shù)據(jù)類型;變量是程序中其值發(fā)生變化的量,變量是程序中其值發(fā)生變化的量,C語言中的變量有以下三種屬性:語言中的變量有以下三種屬性:整型變量整型變量實型變量實型變量字符變量字符變量字符串變量字符串變量 根據(jù)變

2、量的存儲方式的不同,而分為下面各種存儲類型;根據(jù)變量的存儲方式的不同,而分為下面各種存儲類型;auto堆棧型或自動型堆棧型或自動型register寄存器型寄存器型static靜態(tài)型靜態(tài)型extern外部參照型外部參照型變量在使用時有一定的有效范圍。變量在使用時有一定的有效范圍。3 3.3變量變量有關(guān)變量主要內(nèi)容:有關(guān)變量主要內(nèi)容:p變量和變量的地址變量和變量的地址p變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型p數(shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換p變量的存儲類型變量的存儲類型p變量的使用范圍變量的使用范圍p變量的初始化變量的初始化4變量名:用戶根據(jù)其功能任意命名,但變量名不能與變量名:用戶根據(jù)其功能任意命名,但變量名

3、不能與C的保留字的保留字(關(guān)鍵字)相同。一般的(關(guān)鍵字)相同。一般的C編譯系統(tǒng)僅對其前編譯系統(tǒng)僅對其前8個字符作為有效字個字符作為有效字符處理。符處理。變量名在內(nèi)存中占有一個存儲單元,并對應(yīng)一個地址。變量名在內(nèi)存中占有一個存儲單元,并對應(yīng)一個地址。a變量地址變量地址變量(值)變量(值) 3.3.1變量和變量的地址變量和變量的地址在程序運(yùn)行時,變量的數(shù)值存儲在一定的存儲空間中。在程序運(yùn)行時,變量的數(shù)值存儲在一定的存儲空間中。存儲某變量的內(nèi)存空間的首存儲某變量的內(nèi)存空間的首地址地址,稱為,稱為變量的地址變量的地址。例例a內(nèi)存分配:8400a 存儲的首地址為存儲的首地址為8400 &a的值為

4、的值為8400. 變量的地址用變量名前加一個變量的地址用變量名前加一個&符號來標(biāo)示,符號來標(biāo)示,&是一個標(biāo)示取地址的運(yùn)算符號是一個標(biāo)示取地址的運(yùn)算符號 5例例 如,一組變量的定義:如,一組變量的定義: x; a, b, c; pi=; score; 變量的定義變量的定義C使用變量的原則:使用變量的原則: “先定義,再使用先定義,再使用”目的:通知編譯程序為變量分配目的:通知編譯程序為變量分配 適當(dāng)?shù)拇鎯臻g適當(dāng)?shù)拇鎯臻g定義格式定義格式: 數(shù)據(jù)類型數(shù)據(jù)類型 變量名表;變量名表;變量的取值范圍變量的取值范圍存儲空間大?。ㄗ止?jié)數(shù))存儲空間大?。ㄗ止?jié)數(shù))合法標(biāo)識符合法標(biāo)識符定義同時可

5、以賦初值(初始化)定義同時可以賦初值(初始化) 2.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型如果在定義變量的數(shù)據(jù)類型的時候,也要說明變量的存儲類型?如果在定義變量的數(shù)據(jù)類型的時候,也要說明變量的存儲類型?存儲類型存儲類型 數(shù)據(jù)類型數(shù)據(jù)類型 變量名表;變量名表;;變量說明要在程序的數(shù)據(jù)說明部分或者函數(shù)的參數(shù)說明部分進(jìn)行。變量說明要在程序的數(shù)據(jù)說明部分或者函數(shù)的參數(shù)說明部分進(jìn)行。61)類型長度與機(jī)器硬件有關(guān)類型長度與機(jī)器硬件有關(guān)2)在機(jī)器中,正數(shù)用在機(jī)器中,正數(shù)用二進(jìn)制二進(jìn)制原碼原碼表示,負(fù)數(shù)用表示,負(fù)數(shù)用二進(jìn)制二進(jìn)制 補(bǔ)碼補(bǔ)碼表示。表示。1.1.整型變量整型變量3.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型整

6、型數(shù)據(jù)在內(nèi)存中的存放形式整型數(shù)據(jù)在內(nèi)存中的存放形式(二進(jìn)制)(二進(jìn)制)int i; /* 定義為整型變量定義為整型變量 */i=10; /* 給給i賦以整數(shù)賦以整數(shù)10 */( 10 )10 ( 1010 )2數(shù)值是以補(bǔ)碼數(shù)值是以補(bǔ)碼(complement) 表示的。一個正數(shù)的補(bǔ)碼和其原碼的形式相同。表示的。一個正數(shù)的補(bǔ)碼和其原碼的形式相同。73.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型內(nèi)存中負(fù)數(shù)用內(nèi)存中負(fù)數(shù)用二進(jìn)制二進(jìn)制補(bǔ)碼補(bǔ)碼表示。表示。求負(fù)數(shù)的補(bǔ)碼的方法是:將該數(shù)的絕對值的二進(jìn)制形式,按位取反再加求負(fù)數(shù)的補(bǔ)碼的方法是:將該數(shù)的絕對值的二進(jìn)制形式,按位取反再加1。求求-10的補(bǔ)碼:的補(bǔ)碼:取取-

7、10的絕對值的絕對值10;10的絕對值的二進(jìn)制形式為的絕對值的二進(jìn)制形式為1010;對對1010取反得取反得1111111111110101(一個整數(shù)占一個整數(shù)占16位位);再加再加1得得1111111111110110最左面的一位是最左面的一位是表示符號的,該表示符號的,該位為位為0,表示數(shù)值,表示數(shù)值為正;為為正;為1則數(shù)則數(shù)值為負(fù)。值為負(fù)。83.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型整型變量的分類整型變量的分類(1) 基本整型,以基本整型,以int表示。表示。(2) 短整型,短整型, 以以short int表示,或以表示,或以short表示。表示。(3) 長整型,長整型, 以以long in

8、t表示,或以表示,或以long表示。表示。整型變量的整型變量的基本類型符基本類型符為為int。可以根據(jù)數(shù)值的范圍將變量定義為基本整型、短整型或長整型??梢愿鶕?jù)數(shù)值的范圍將變量定義為基本整型、短整型或長整型。在在turbo c中一個中一個int型的變量的值范圍為型的變量的值范圍為-215(215-1) ,即,即-3276832767。 為了充分利用變量的表數(shù)范圍,可以將變量定義為為了充分利用變量的表數(shù)范圍,可以將變量定義為“無符號無符號”類型。類型。 有符號基本整型有符號基本整型 signed int 無符號基本整型無符號基本整型 unsigned int有符號短整型有符號短整型 signed

9、short int無符號短整型無符號短整型 unsigned short int有符號長整型有符號長整型 signed long int無符號長整型無符號長整型 unsigned long int93.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型整型變量的分類整型變量的分類 如果指定如果指定unsigned,為無符號型,存儲單元中全部二進(jìn)位,為無符號型,存儲單元中全部二進(jìn)位(bit)用作存放數(shù)本身,用作存放數(shù)本身, 而不包括符號。而不包括符號。 無符號型變量只能存放不帶符號的整數(shù)。無符號型變量只能存放不帶符號的整數(shù)。 一個無符號整型變量中可以存放的正數(shù)的范圍比一般整型變量中正數(shù)的范圍擴(kuò)大一倍。一個無符號

10、整型變量中可以存放的正數(shù)的范圍比一般整型變量中正數(shù)的范圍擴(kuò)大一倍。 定義定義a和和b兩個變量兩個變量:int a;unsigned int b;例例則則變量變量a的數(shù)值范圍為的數(shù)值范圍為-3276832767。而變量。而變量b的數(shù)值范圍為的數(shù)值范圍為065535。103.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型整型變量的分類整型變量的分類113.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型整型數(shù)據(jù)的溢出整型數(shù)據(jù)的溢出例例 main( ) int a,b; a=32767; b=a+1; printf(%d,%d,a,b); 運(yùn)行結(jié)果為運(yùn)行結(jié)果為:32767,-32768b改成改成long型就可得到預(yù)期的結(jié)果型

11、就可得到預(yù)期的結(jié)果32768- 32768 的補(bǔ)碼形式的補(bǔ)碼形式123.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型2.實型變量(浮點型變量)實型變量(浮點型變量)i.存放包含小數(shù)位的值存放包含小數(shù)位的值ii.分單精度分單精度(float)和雙精度和雙精度(double)兩種兩種iii.float 接收七位有效數(shù)字,接收七位有效數(shù)字,double型接收型接收15位或位或16位,與位,與機(jī)器硬件有關(guān)機(jī)器硬件有關(guān)浮點型常量既可以賦給浮點型常量既可以賦給float型變量,也可以賦給型變量,也可以賦給double型變量在型變量在 賦值時,將根據(jù)賦值時,將根據(jù)變量的類型變量的類型來來截取截取相應(yīng)的相應(yīng)的有效位數(shù)有

12、效位數(shù)。例:例: float a; double b; a=123456.789; b=123456.789;正確的結(jié)果是正確的結(jié)果是: a的值為:的值為:123456.7 b的值為:的值為:123456.789133.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型實型變量在內(nèi)存中的存放形式實型變量在內(nèi)存中的存放形式 在常用的微機(jī)系統(tǒng)中,一個實型數(shù)據(jù)在內(nèi)存中占在常用的微機(jī)系統(tǒng)中,一個實型數(shù)據(jù)在內(nèi)存中占4個字節(jié)個字節(jié)(32位位)。實型數(shù)據(jù)是按照指數(shù)形式存儲的。實型數(shù)據(jù)是按照指數(shù)形式存儲的。 /*系統(tǒng)把一個實型數(shù)據(jù)分成系統(tǒng)把一個實型數(shù)據(jù)分成小數(shù)部分小數(shù)部分和和指數(shù)部分指數(shù)部分,分別存放分別存放。*/在在4個字

13、節(jié)個字節(jié)(32位位)中,用多少位中,用多少位來表示小數(shù)部分,多少位來表來表示小數(shù)部分,多少位來表示指數(shù)部分,標(biāo)準(zhǔn)示指數(shù)部分,標(biāo)準(zhǔn)C并無具體并無具體規(guī)定,由各規(guī)定,由各C編譯系統(tǒng)自定。編譯系統(tǒng)自定。143.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型3.字符型變量字符型變量在一個字節(jié)的存儲空間中,存放在一個字節(jié)的存儲空間中,存放“表示表示”單個字符的整型數(shù)單個字符的整型數(shù)(ASCII碼碼)字符變量的定義形式如下:字符變量的定義形式如下:charc1,c2;一般用一般用unsigned char (0255)定義字符變量即可定義字符變量即可 可直接參與整型變量的運(yùn)算可直接參與整型變量的運(yùn)算例:例: char

14、 ch= A;ch+1 B等價:等價: 65+1 66又又 ch+32 97 a例:例: 1) char ch=A; 則則ch中存放的是中存放的是ASCII碼碼65 A 65 2) char ch=49; 由于由于49是是1的的ASCII碼碼 所以表示字符所以表示字符1 思考一下思考一下 下列定義中下列定義中c1和和c2的結(jié)果是否等價的結(jié)果是否等價,為什么為什么? char c1=a; short int c2=97;153.3.2變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型字符型變量在內(nèi)存中的存放形式字符型變量在內(nèi)存中的存放形式將一個字符常量放到一個字符變量中,將一個字符常量放到一個字符變量中,實際上并不是

15、把該字符本身放到內(nèi)存單元中去,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。代碼放到存儲單元中。例例char c1=a;char c2=b;c1=97c2=98163.3.3不同類型數(shù)據(jù)間的轉(zhuǎn)換不同類型數(shù)據(jù)間的轉(zhuǎn)換類型轉(zhuǎn)換的概念類型轉(zhuǎn)換的概念在程序運(yùn)行中,一種數(shù)據(jù)的類型改變成另一種數(shù)據(jù)類型在程序運(yùn)行中,一種數(shù)據(jù)的類型改變成另一種數(shù)據(jù)類型類型轉(zhuǎn)換兩種方式類型轉(zhuǎn)換兩種方式a)隱式轉(zhuǎn)換隱式轉(zhuǎn)換自動類型轉(zhuǎn)換自動類型轉(zhuǎn)換b)顯式轉(zhuǎn)換顯式轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換隱式轉(zhuǎn)換發(fā)生在下列三種情況隱式轉(zhuǎn)換發(fā)生在下列三種情況1.混合運(yùn)算(算術(shù)轉(zhuǎn)換)

16、混合運(yùn)算(算術(shù)轉(zhuǎn)換)2.賦值運(yùn)算賦值運(yùn)算3.數(shù)據(jù)輸入輸出數(shù)據(jù)輸入輸出17一一. .算術(shù)轉(zhuǎn)換(算術(shù)轉(zhuǎn)換(隱式轉(zhuǎn)換隱式轉(zhuǎn)換)當(dāng)不同類型數(shù)據(jù)混合運(yùn)算時,自動進(jìn)行的轉(zhuǎn)換當(dāng)不同類型數(shù)據(jù)混合運(yùn)算時,自動進(jìn)行的轉(zhuǎn)換3.3.3不同類型數(shù)據(jù)間的轉(zhuǎn)換不同類型數(shù)據(jù)間的轉(zhuǎn)換語言允許整型、單精度浮點型和雙精度浮點型數(shù)據(jù)之間進(jìn)語言允許整型、單精度浮點型和雙精度浮點型數(shù)據(jù)之間進(jìn)行混合運(yùn)算,由于字符型數(shù)據(jù)可以和整型數(shù)據(jù)通用,所以,下行混合運(yùn)算,由于字符型數(shù)據(jù)可以和整型數(shù)據(jù)通用,所以,下列表達(dá)式是合法的:列表達(dá)式是合法的: B+3.14*560-92轉(zhuǎn)換原則轉(zhuǎn)換原則第一點:帶第一點:帶* *為無條件的轉(zhuǎn)換為無條件的轉(zhuǎn)換第二點:

17、視周圍類型的高低第二點:視周圍類型的高低 采取采取“向高看齊向高看齊”183.3.3不同類型數(shù)據(jù)間的轉(zhuǎn)換不同類型數(shù)據(jù)間的轉(zhuǎn)換一一. .算術(shù)轉(zhuǎn)換(算術(shù)轉(zhuǎn)換(隱式轉(zhuǎn)換隱式轉(zhuǎn)換)doublelong 2.0 2.519二二. .強(qiáng)制類型轉(zhuǎn)換(強(qiáng)制類型轉(zhuǎn)換(顯式轉(zhuǎn)換顯式轉(zhuǎn)換) 在程序中強(qiáng)制地進(jìn)行類型轉(zhuǎn)換在程序中強(qiáng)制地進(jìn)行類型轉(zhuǎn)換 使用格式使用格式 ( (類型名類型名) ) 表達(dá)式表達(dá)式 精度問題:較高類型向較低類型轉(zhuǎn)換時,可能發(fā)生損失精度問題:較高類型向較低類型轉(zhuǎn)換時,可能發(fā)生損失基本類型或指針類型基本類型或指針類型 常量、變量、表達(dá)式常量、變量、表達(dá)式 3.3.3不同類型數(shù)據(jù)間的轉(zhuǎn)換不同類型數(shù)據(jù)間的

18、轉(zhuǎn)換例:例:sqrt()函數(shù)調(diào)用時,要求參數(shù)是函數(shù)調(diào)用時,要求參數(shù)是double型型數(shù)據(jù)。而變量數(shù)據(jù)。而變量n是是int型,且作為該函數(shù)的參數(shù)型,且作為該函數(shù)的參數(shù)使用時,就必須強(qiáng)制轉(zhuǎn)換使用時,就必須強(qiáng)制轉(zhuǎn)換n的數(shù)據(jù)類型。的數(shù)據(jù)類型。 sqrt(double) n)203.3.3不同類型數(shù)據(jù)間的轉(zhuǎn)換不同類型數(shù)據(jù)間的轉(zhuǎn)換NOTE無論是自動地還是強(qiáng)制地實現(xiàn)數(shù)據(jù)類型的轉(zhuǎn)換,無論是自動地還是強(qiáng)制地實現(xiàn)數(shù)據(jù)類型的轉(zhuǎn)換,僅僅是為本次運(yùn)算或賦值的需要而對變量的數(shù)僅僅是為本次運(yùn)算或賦值的需要而對變量的數(shù)據(jù)長度進(jìn)行一時性的轉(zhuǎn)換,并不能改變數(shù)據(jù)說據(jù)長度進(jìn)行一時性的轉(zhuǎn)換,并不能改變數(shù)據(jù)說明時對該變量規(guī)定的數(shù)據(jù)類型。

19、明時對該變量規(guī)定的數(shù)據(jù)類型。213.3.4變量的存儲類型變量的存儲類型變量的存儲類型規(guī)定了該變量數(shù)據(jù)的存儲區(qū)域。變量的存儲類型規(guī)定了該變量數(shù)據(jù)的存儲區(qū)域。C語言的變量共語言的變量共有四種存儲類型:有四種存儲類型:auto堆棧型或自動型堆棧型或自動型register寄存器型寄存器型static靜態(tài)型靜態(tài)型extern外部參照型外部參照型223.3.4變量的存儲類型變量的存儲類型一一. auto堆棧型或自動型堆棧型或自動型p存儲在內(nèi)存的堆棧區(qū);存儲在內(nèi)存的堆棧區(qū);p它只是一臨時性存儲,并不長期占用內(nèi)存,其存儲空間可以被若干變量多次覆蓋;它只是一臨時性存儲,并不長期占用內(nèi)存,其存儲空間可以被若干變量

20、多次覆蓋;pC語言中大量使用的變量是語言中大量使用的變量是auto型,型, auto在寫程序時通常被省略。在寫程序時通常被省略。例例1:int i, j;其中其中i,j都是都是auto型,型,占用內(nèi)存如圖:占用內(nèi)存如圖:堆棧堆棧ij例例2:當(dāng)例當(dāng)例1結(jié)束后,又有另一程序如:結(jié)束后,又有另一程序如:char a, b; a,b是是auto型,型,它可以覆蓋它可以覆蓋i所占用的內(nèi)存。所占用的內(nèi)存。堆棧堆棧abj233.3.4變量的存儲類型變量的存儲類型二二. register寄存器型寄存器型p存儲在存儲在CPU的通用寄存器中,即為的通用寄存器中,即為16位;位;p數(shù)據(jù)類型為數(shù)據(jù)類型為long, d

21、ouble和和float的變量不能設(shè)為的變量不能設(shè)為register型;型;例例1:register char c;在通用寄存器中存儲如圖在通用寄存器中存儲如圖c通用寄存器通用寄存器寄存器寄存器1寄存器寄存器2在在C程序中設(shè)定程序中設(shè)定register型變量的個數(shù)型變量的個數(shù)不是任意不是任意的,通常的,通常兩個兩個左右。左右。編譯系統(tǒng)對于超過編譯系統(tǒng)對于超過CPU中可使用的通用寄存器個數(shù)的中可使用的通用寄存器個數(shù)的register變量作變量作auto變量變量。例例2:register char a, b, c; 存儲如圖存儲如圖通用寄存器通用寄存器ab寄存器寄存器1寄存器寄存器2c堆棧堆棧24

22、3.3.4變量的存儲類型變量的存儲類型三三. static靜態(tài)型靜態(tài)型p存儲在一般的內(nèi)存區(qū)域中;存儲在一般的內(nèi)存區(qū)域中;p在數(shù)據(jù)說明時被分配了一定的內(nèi)存空間;在數(shù)據(jù)說明時被分配了一定的內(nèi)存空間;p分配的空間在整個程序運(yùn)行中,自始至終都?xì)w該變量使用。分配的空間在整個程序運(yùn)行中,自始至終都?xì)w該變量使用。例例1:static int n; 在內(nèi)存中存儲如在內(nèi)存中存儲如圖圖內(nèi)存內(nèi)存n例例2:在例在例1執(zhí)行后,又有執(zhí)行后,又有static int m; 存儲如圖存儲如圖內(nèi)存內(nèi)存nm253.3.4變量的存儲類型變量的存儲類型四四. extern外部型外部型p外部變量一般用于在程序的多個編譯單位之間傳遞數(shù)據(jù)

23、;外部變量一般用于在程序的多個編譯單位之間傳遞數(shù)據(jù); p指定指定extern型的變量是在其它編譯單位的源文件中定義的型的變量是在其它編譯單位的源文件中定義的 ;p存儲空間需要參照本身的編譯單位外部而決定,外部參照型存儲空間需要參照本身的編譯單位外部而決定,外部參照型 。263.3.5變量的使用范圍變量的使用范圍p變量的變量的存儲區(qū)域存儲區(qū)域和變量在和變量在程序中說明的位置程序中說明的位置決定了變量的使用范圍。決定了變量的使用范圍。p變量的變量的可見性(作用域)可見性(作用域):變量的:變量的有效使用范圍有效使用范圍,分為:全局可見和局部可見兩種特性。,分為:全局可見和局部可見兩種特性。內(nèi)部變量

24、:內(nèi)部變量:在函數(shù)內(nèi)部或某大括弧包圍的程序內(nèi)部說明的變量。在函數(shù)內(nèi)部或某大括弧包圍的程序內(nèi)部說明的變量。 可以是可以是auto型,型,register型,其中型,其中auto型可以缺省;型可以缺??;auto型,型,register型是局部可見、局部壽命,型是局部可見、局部壽命,static是局部可見、全局壽命。是局部可見、全局壽命。外部變量:外部變量:在所有函數(shù)外部說明的變量。在所有函數(shù)外部說明的變量。 可以是可以是static型和缺省存儲類型的變量,是全局可見、全局壽型和缺省存儲類型的變量,是全局可見、全局壽命。命。p變量的變量的生存期生存期:變量在程序運(yùn)行期間的壽命,分為:全局壽命和局部壽

25、命兩種特性。:變量在程序運(yùn)行期間的壽命,分為:全局壽命和局部壽命兩種特性。273.3.5變量的使用范圍變量的使用范圍全局壽命:全局壽命:其壽命存在與其壽命存在與整個程序的運(yùn)行整個程序的運(yùn)行過程中的變量。過程中的變量。 如如static型的變量,外部變量。型的變量,外部變量。局部壽命:局部壽命:函數(shù)開始調(diào)用時為變量分配存儲空間,函數(shù)結(jié)束時釋放這函數(shù)開始調(diào)用時為變量分配存儲空間,函數(shù)結(jié)束時釋放這些空間。些空間。 如如auto型,型,register型變量。型變量。28int b;main()int i;static int a;i = 1; a = 10; b = 5;printf(“-MAIN-

26、n”);printf(“i:%d a:%d b:%dn”,i, a, b);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 100;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍29int b;main()int i;static int a;i = 1; a = 10; b = 5;printf(“-MAIN-n”);printf(“i:%d a:%

27、d b:%dn”,i, a, b);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 100;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍定義外部變量定義外部變量b,在整個程序過程,在整個程序過程中起作用中起作用30int b;main()int i;static int a;i = 1; a = 10; b = 5;printf(“-MAIN-n”)

28、;printf(“i:%d a:%d b:%dn”,i, a, b);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 100;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍i為為auto型內(nèi)部變量,型內(nèi)部變量,只在只在main內(nèi)起作用。內(nèi)起作用。31int b;main()int i;static int a;i = 1; a = 10; b = 5;

29、printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 100;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍a為為static型內(nèi)部變量型內(nèi)部變量只在只在main函數(shù)內(nèi)起作用函數(shù)內(nèi)起作用具備具備全局壽命全局壽命和和局部可見性局部可見性32int b;mai

30、n()int i;static int a;i = 1; a = 10; b = 5;printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 100;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:10 b:533i

31、nt b;main()int i;static int a;i = 1; a = 10; b = 5;printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 100;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍調(diào)用函數(shù)調(diào)用函數(shù)other()運(yùn)行結(jié)果:運(yùn)行結(jié)

32、果:-MAIN-i:1 a:10 b:534int b;main()int i;static int a;i = 1; a = 10; b = 5;printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 100;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍

33、 i為為auto內(nèi)部變量,只在內(nèi)部變量,只在other函數(shù)內(nèi)部起作用,函數(shù)內(nèi)部起作用,與與main函數(shù)內(nèi)的函數(shù)內(nèi)的i不沖突。不沖突。運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:10 b:535int b;main()int i;static int a;i = 1; a = 10; b = 5;printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 10

34、0;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:10 b:5 a為為static型內(nèi)部變量,只在型內(nèi)部變量,只在other函數(shù)內(nèi)部起作用,函數(shù)內(nèi)部起作用,與與main函數(shù)內(nèi)的函數(shù)內(nèi)的a不沖突。不沖突。具備具備全局壽命全局壽命和和局部可見性局部可見性36int b;main()int i;static int a;i = 1; a = 10; b = 5;printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b

35、);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 100;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍調(diào)用結(jié)束返回主函數(shù)調(diào)用結(jié)束返回主函數(shù)main()運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:10 b:5-OTHER-i:16 a:100 b:537int b;main()int i;static int a;i = 1; a = 10; b =

36、 5;printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other();printf(“-MAIN-n”);printf(“i:%d a:%d b:%dn”,i, a, b);other()int i;static int a;i = 16; a = 100;printf(“-OTHER-n”);printf(“i:%d a:%d b:%dn”,i, a, b);3.3.5變量的使用范圍變量的使用范圍主函數(shù)主函數(shù)main()運(yùn)行結(jié)束運(yùn)行結(jié)束運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:10 b:5-OTHER-i:16 a:100 b:5-M

37、AIN-i:1 a:10 b:5383.3.5變量的使用范圍變量的使用范圍 總結(jié)總結(jié)3、外部變量:、外部變量:外部變量外部變量可以是可以是static型變量和缺省存儲類型的變量,型變量和缺省存儲類型的變量, 具備具備全局壽命全局壽命和和全局可見性全局可見性。1、auto型,型,register型變量是型變量是內(nèi)部變量內(nèi)部變量,具備,具備局部壽命局部壽命和和局部可見性局部可見性。2、static型變量可以是型變量可以是內(nèi)部變量內(nèi)部變量也可以是也可以是外部變量外部變量,但無論是內(nèi)部,但無論是內(nèi)部 變量還是外部變量,它具備全局壽命,變量還是外部變量,它具備全局壽命,static 型內(nèi)部變量具有型內(nèi)部

38、變量具有全局壽命全局壽命和和 局部可見性局部可見性。393.3.6變量的初始化變量的初始化要點要點 沒有進(jìn)行初始化的沒有進(jìn)行初始化的auto型和型和register型變量,型變量, 不能直接在程序中使用,但可被多次賦值。不能直接在程序中使用,但可被多次賦值。 static型變量和外部變量不進(jìn)行初始化的話,型變量和外部變量不進(jìn)行初始化的話, 自動賦予零值,自動賦予零值,static型變量初始化只進(jìn)行一次。型變量初始化只進(jìn)行一次。 指定為指定為extern型的變量不能進(jìn)行初始化。型的變量不能進(jìn)行初始化。 static型變量和外部變量必須用常量進(jìn)行初始型變量和外部變量必須用常量進(jìn)行初始 化,而化,而

39、auto型和型和register型變量則可以用常量和型變量則可以用常量和 變量進(jìn)行初始化。變量進(jìn)行初始化。p 變量在說明的同時,可以被賦予變量在說明的同時,可以被賦予初值初值,這稱為變量的,這稱為變量的初始化初始化。403.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8;other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:

40、%dn”,i,a,b,c);i = i + 10;other();other()static int a = 2; static int b; int c = 10;a = a + 2;i = i + 32;c = c + 5;printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a;413.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,

41、i,a,b,c);c = c + 8;other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10;other();other()static int a = 2; static int b; int c = 10;a = a + 2;i = i + 32;c = c + 5;printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a;變量變量i為外部變量,為外部變量,賦值為賦值為1423.3.6變量的初始化變量的初始化int i = 1;main(

42、)static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8;other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10;other();other()static int a = 2; static int b; int c = 10;a = a + 2;i = i + 32;c = c + 5;printf(“-OTHER-n”);printf(“i

43、:%da:%db:%dc:%dn”,i,a,b,c);b = a;a為為static型內(nèi)部變量,會型內(nèi)部變量,會自動賦值為自動賦值為0;b為為register型內(nèi)部變量,賦值為型內(nèi)部變量,賦值為-10;c為為auto型內(nèi)部變量,初值型內(nèi)部變量,初值為為0。433.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8;other();printf(“-MAIN-n”);pr

44、intf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10;other();other()static int a = 2; static int b; int c = 10;a = a + 2;i = i + 32;c = c + 5;printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a;運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0443.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; in

45、t c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10;other();other()static int a = 2; static int b; int c = 10;a = a + 2;i = i + 32;c = c + 5;printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a

46、;調(diào)用函數(shù)調(diào)用函數(shù)other()運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0453.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10;other();other()static int a

47、= 2; static int b; int c = 10;a = a + 2;i = i + 32;c = c + 5;printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a;a為為static型內(nèi)部變量,初值型內(nèi)部變量,初值為為2;b為為static型內(nèi)部變量,型內(nèi)部變量,自動賦值為自動賦值為0;c為為auto型內(nèi)型內(nèi)部變量,初值為部變量,初值為10。運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0463.3.6變量的初始化變量的初始化int i = 1;main()static int a; regist

48、er int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10;other();other()static int a = 2; static int b; int c = 10;a = a + 2; / a=2+2=4i = i + 32; / i=1+32=33c = c + 5; / c=10+5=15printf(“-

49、OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a; / b=4運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0-OTHER-i:33 a:4 b:0 c:15473.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAIN-n”);printf(“i

50、:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10;other();other()static int a = 2; static int b; int c = 10;a = a + 2; / a=2+2=4i = i + 32; / i=1+32=33c = c + 5; / c=10+5=15printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a; / b=4運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0-OTHER-i:33 a:4 b:0 c:15調(diào)用結(jié)束返回主函數(shù)調(diào)用結(jié)束返回

51、主函數(shù)main()483.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10; other();other()static int a = 2; static int b; int c = 10;a = a + 2

52、; / a=2+2=4i = i + 32; / i=1+32=33c = c + 5; / c=10+5=15printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a; / b=4運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0-OTHER-i:33 a:4 b:0 c:15-MAIN-i:33 a:0 b:-10 c:8493.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”

53、);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10; / i=33+10=43other();other()static int a = 2; static int b; int c = 10;a = a + 2; / a=2+2=4i = i + 32; / i=1+32=33c = c + 5; / c=10+5=15printf(“-OTHER-n”);printf(“i:%da:%db:

54、%dc:%dn”,i,a,b,c);b = a; / b=4運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0-OTHER-i:33 a:4 b:0 c:15-MAIN-i:33 a:0 b:-10 c:8再次調(diào)用函數(shù)再次調(diào)用函數(shù)other()503.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAI

55、N-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10; / i=33+10=43other();other()static int a = 2; static int b; int c = 10;a = a + 2; / a=4+2=6 i = i + 32; / i=1+32=33c = c + 5; / c=10+5=15printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a; / b=4運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0-OTHER-i:3

56、3 a:4 b:0 c:15-MAIN-i:33 a:0 b:-10 c:8再次調(diào)用函數(shù)再次調(diào)用函數(shù)other()513.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10; / i=33+10=43other()

57、;other()static int a = 2; static int b; int c = 10;a = a + 2; / a=4+2=6 i = i + 32; / i=43+32=75c = c + 5; / c=10+5=15printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a; / b=4運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0-OTHER-i:33 a:4 b:0 c:15-MAIN-i:33 a:0 b:-10 c:8再次調(diào)用函數(shù)再次調(diào)用函數(shù)other()523.3.6變量的初始化變量

58、的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10; / i=33+10=43other();other()static int a = 2; static int b; int c = 10;a = a + 2; / a=4+2=6

59、i = i + 32; / i=43+32=75c = c + 5; / c=10+5=15printf(“-OTHER-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);b = a; / b=4運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0-OTHER-i:33 a:4 b:0 c:15-MAIN-i:33 a:0 b:-10 c:8再次調(diào)用函數(shù)再次調(diào)用函數(shù)other()53運(yùn)行結(jié)果:運(yùn)行結(jié)果:-MAIN-i:1 a:0 b:-10 c:0-OTHER-i:33 a:4 b:0 c:15-MAIN-i:33 a:0 b:-10 c:8-OTH

60、ER-i:75 a:6 b:4 c:15再次調(diào)用函數(shù)再次調(diào)用函數(shù)other()3.3.6變量的初始化變量的初始化int i = 1;main()static int a; register int b= -10; int c = 0;printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);c = c + 8; / c=8other();printf(“-MAIN-n”);printf(“i:%da:%db:%dc:%dn”,i,a,b,c);i = i + 10; / i=33+10=43other();other()static int a = 2; static int b; in

溫馨提示

  • 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

提交評論