2.1 C語言的數(shù)據(jù)類型 數(shù)據(jù)類型包含兩方面的內(nèi)容:數(shù)據(jù)的表示和對數(shù)據(jù)加工的操作。數(shù)據(jù)的全部可能表示構(gòu)成數(shù)據(jù)類型的值的集合。數(shù)據(jù)全部合理的操作構(gòu)成數(shù)據(jù)類型的操作集合。 在C語言中,把整型、實型和字符型稱為基本數(shù)據(jù)類型,又稱整型和實型為數(shù)值型。為了描述更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),C語言還有構(gòu)造類型、指針類型、放舉類型和空類型。構(gòu)造類型是指由若干個相關(guān)的數(shù)據(jù)組合在一起形成的一種復(fù)雜數(shù)據(jù)類型。 1.整型 整型數(shù)據(jù)按其存儲在內(nèi)存中的二進(jìn)位信息的最高位是當(dāng)作數(shù)值信息位還是當(dāng)作數(shù)據(jù)的符號位,將整型數(shù)據(jù)分成帶符號整型和無符號整型兩種。每種整型又按所需的字節(jié)個數(shù)的多少分成三種。所以整型共有6種: 帶符號整型(int)、帶符號短整型(short int)、帶符號長整型(long int,或 long)、無符號整型(unsigned int)、無符號短整型(unsigned short int)以無符號長整型(unsigned long)。 2.實型 實型數(shù)據(jù)有表示范圍和精度兩個不同的特征,為了適應(yīng)數(shù)的范圍和精度的不同要求,實型數(shù)據(jù)分三種類型:單精度型(也稱浮點型 float)、雙精度型(double)、長雙精度型(long double) 3.構(gòu)造類型 構(gòu)造類型是指由若干個相關(guān)的數(shù)據(jù)組合在一起形成的一種復(fù)雜數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型的成分?jǐn)?shù)據(jù)可以是基本數(shù)據(jù)類型的,也可以是別的構(gòu)造類型的。按構(gòu)造方式和構(gòu)造要求區(qū)分,構(gòu)造類型主要有數(shù)組類型、結(jié)構(gòu)類型和共用類型。數(shù)組類型是由相同類型的數(shù)據(jù)組成;結(jié)構(gòu)類型可以由不同類型的數(shù)據(jù)組成;當(dāng)不同數(shù)據(jù)類型不會同時使用時,以節(jié)約內(nèi)存,讓不同數(shù)據(jù)占用同一區(qū)域,這就是共用類型。 4.指針類型 指針類型是取程序?qū)ο螅ㄈ缱兞浚┰趦?nèi)存中占居的地址為值的一種特殊的數(shù)據(jù)類型。 5.枚舉類型 當(dāng)變量只取很少幾種可能的值,并分別用標(biāo)識符對值命名時,這種變量的數(shù)據(jù)類型可用枚舉類型來表示。如變量表示一個星期中的某一天,就可用校舉類型描述該變量的類型,并以星期見的英文名對日期命名,對應(yīng)的變量取某日的星期名稱為其值。 6.void類型 用保留字VOid表示的數(shù)據(jù)類型有兩種完全相反的意思,或表示沒有數(shù)據(jù)(沒有結(jié)果、沒有形式參數(shù)),或表示某種任意類型的數(shù)據(jù)(如又與指針結(jié)合,用 void.標(biāo)記)。 void表示空類型,void.表示任意數(shù)據(jù)的指針類型,程序如要使用 void.類型的數(shù)據(jù),應(yīng)該將它強制地轉(zhuǎn)換成某種具體的指針類型。 2.2 常量 常量是指程序運行過程中其值不可改變的數(shù)據(jù)。常量按其值的表現(xiàn)形式可分為如下類型:整型常量、實型常量、字符型常量、字符串常量和指針常量。 1.整型常量 C語言整型常量的書寫形式有三種: (1)十進(jìn)制整數(shù)。通常整數(shù)的寫法,如0,123,-45,+25. �。�2)八進(jìn)制整數(shù)。以數(shù)字符0開頭并由數(shù)字符0-7組成的數(shù)字符序列,為八進(jìn)制整數(shù)。如 0123表示八進(jìn)制整數(shù),其值等于十進(jìn)制整數(shù) l*8*8+2*8+3=83. �。�3)十六進(jìn)制整數(shù)。十六進(jìn)制整數(shù)以O(shè)X(或OX)開頭的整數(shù)。表示十六進(jìn)制數(shù)的數(shù)字將有16個,它們分別是0-9和A、B、C、D、E、F,其中六個英文字母也可以小寫。例如,0x123表示十六進(jìn)制整數(shù),其值等于十進(jìn)制整數(shù)1*16*16+2*16+3=291; oxabc,其值等于10*16*16+11+16+12=2748. 整型常量也可在整數(shù)之后接上字母L(或l),特別指明它是 long型的。 整型常量也可在整數(shù)之后接上字母U(或u),特別指明是不帶符號的,即是unsigned型的。為指明不帶符號的long型整型常量,則需在整數(shù)之后同時加上字母U和L,表明該整型常量是unsigned long型的。 整型數(shù)據(jù)以二進(jìn)制形式存放,要求短整型數(shù)據(jù)的字節(jié)數(shù)不能大于整型數(shù)據(jù)的字節(jié)數(shù);整型數(shù)據(jù)的字節(jié)數(shù)不能大于長整型數(shù)據(jù)的字節(jié)數(shù)。對于帶符號的整數(shù),用二進(jìn)制代碼的最左二進(jìn)位作為數(shù)的符號,1表示負(fù)數(shù),0表示正數(shù)。 2.實型常量 C語言實型常量的一般書寫格式是: 正負(fù)號 整數(shù)部分。小數(shù)部分 指數(shù)部分 其中,正負(fù)號可有可無,無正負(fù)號即為正實數(shù);整數(shù)部分和小數(shù)部分都是十進(jìn)數(shù)字符序列;指數(shù)部分是e(或E)后接上正負(fù)號(正號可有可無)和十進(jìn)數(shù)字符序列。 按上述格式書寫實型常量,另有兩條限制: �。╨)整數(shù)部分和小數(shù)部分可以任選,但不可同時都沒有。 �。�2)小數(shù)點和指數(shù)部分不可以同時都沒有。 ANSIC引入兩個后綴字符,用 f標(biāo)識 float型實型常量,用 1(或 L)標(biāo)識 fong double型實型常量,而無后綴符的實型常量被認(rèn)為是double型的實型常量。 要注意實型常量的有效位數(shù),不要以為寫上的數(shù)字都能被計算機(jī)所接受。在大多數(shù)C系統(tǒng)中,一個float型實型數(shù)據(jù)在內(nèi)存中占用4個字節(jié)(32個二進(jìn)位),約7個十進(jìn)位有效數(shù)字,能表示絕對值最接近0的實數(shù)約為10的-38次方,最大的實數(shù)約為10的38次方。例如,對于代碼 float x=123456.123f,在大多數(shù)系統(tǒng)中,實型常量123456.123f的最后兩位數(shù)字是無效的。 double型實型數(shù)據(jù)占用8個字節(jié)(64個二進(jìn)位),約15個十進(jìn)位有效數(shù)字,能表示絕對值最接近0的實數(shù)約為10的一308次方,最大的實數(shù)約為10的308次方。 3.字符常量 字符型數(shù)據(jù)用于表示一個字符值,但字符型數(shù)據(jù)的內(nèi)部表示是字符的ASCll代碼(8位二進(jìn)位的二進(jìn)制形式)。字符型數(shù)據(jù)的類型符用char來標(biāo)記。字符型常量的書寫方法: �。╨)普通字符——用單引號括起一個字符。如‘a(chǎn)’、‘b’、‘B’、‘$’。 �。�2)特殊字符——用‘\字符或字符列采標(biāo)記。這種標(biāo)記方法有三種: ‘\特定字符’,標(biāo)記特定控制符,如換行符用‘\ n’來標(biāo)記。 ·‘\ 1至3個人進(jìn)制數(shù)字’,以人進(jìn)數(shù)表示字符的ASCll代碼。 ‘\ X1至2個十六進(jìn)制數(shù)字符’,以十六進(jìn)制數(shù)表示字符的 ASCll代碼。 由于字符以代碼存放,所以也可把字符值當(dāng)作一個小整數(shù)。反之,一個小整數(shù)也可把它理解為是某個字符的代碼,把它當(dāng)作一個字符。 4.字符串常量 字符串常量用來表示一個字符序列,它的書寫方法用雙引號括住字符序列。例如:“ABC”、“”等。字符串常量“”是一個空字符串,即不含任何有效字符的字符串。字符串?dāng)?shù)據(jù)順序存儲字符串字符的ASCll代碼,并在最后字符后面存儲一個H進(jìn)制代碼全為0的特殊字符,用來標(biāo)記字符串的結(jié)束。所以字符串常量“1234”在內(nèi)存占5個字節(jié),而空字符串只占一個字節(jié)。字符串中的字符也可以是轉(zhuǎn)義字符。 5.符號常量 為了提高程序的可讀性,常量可以用以下形式命名: # define 標(biāo)識符 常量 其中的標(biāo)識符也稱作符號常量,這里的常量是前面所述的某種常量、或是程序中前面定義的符號常量。例如: # define MAXN 100 2.3 變量 變量是程序執(zhí)行時,其值允許改變的數(shù)據(jù)對象,用來存儲輸入數(shù)據(jù)、計算的中間結(jié)果和程序的最終結(jié)果等。 1.變量定義 變量用標(biāo)識符命名,通過變量定義引入的變量名習(xí)慣用英文字母開頭,C系統(tǒng)可能也會預(yù)定義一些標(biāo)記系統(tǒng)特性的變量,系統(tǒng)定義的變量習(xí)慣用下線字符開頭。變量的數(shù)據(jù)特性由變量定義時指定的類型確定。若定義指定數(shù)據(jù)類型的變量(即不在指定數(shù)據(jù)類型基礎(chǔ)上定義新數(shù)據(jù)類型的變量,如指定類型的指針、數(shù)組等),這種變量定義的句法為: 數(shù)據(jù)類型符變量名1,變量名2,……; 編繹系統(tǒng)根據(jù)變量的數(shù)據(jù)類型確定存放它的值所需要的內(nèi)存字節(jié)數(shù),變量值的內(nèi)部表示形多也由其類型確定。 2.內(nèi)部變量和外部變量 變量按其定義出現(xiàn)在程序中的位置不同分成兩類:在函數(shù)內(nèi)定義的變量稱為內(nèi)部變量,而在函數(shù)之外(函數(shù)之間)定義的變量稱為外部變量。 3.變量的存儲類型 系統(tǒng)按程序?qū)τ嬎銠C(jī)存儲空間使用的不同要求,將內(nèi)存分成不同用途的塊,與計算機(jī)的寄存器一起將存儲空間分成不同類別。而C程序通過指定變量的存儲類表明變量的不同的使用要求,讓系統(tǒng)將變量分配于不同的內(nèi)存塊或寄存器。如在上述變量定義形式中,還要指定變量的存儲類型,變量定義的形式為: 存儲類型符數(shù)據(jù)類型符變量名1,變量名2,…; 其中存儲類型有四種: auto(自動的)、static(靜態(tài)的)、register寄存器的)和 extem外部的)。 外部變量只允許被指定為靜態(tài)的,或不指定其存儲類型。內(nèi)部變量可以被指定為自動的或靜態(tài)的、或寄存器的、或不指定存儲類型,若不指定存儲類型,它就是自動的。 自動變量是內(nèi)部變量,在函數(shù)內(nèi)或復(fù)合語句內(nèi)定義,它們被分配在堆棧區(qū)。 靜態(tài)變量可以是內(nèi)部變量,也可以是外部變量。靜態(tài)變量表示永久性和專用性,即在程序執(zhí)行過程中一直存在,局限于定義它的函數(shù)(內(nèi)部靜態(tài)變量)或局限于定義它的程序文件中那些函數(shù)(外部靜態(tài)變量)。靜態(tài)變量被分配在與程序相聯(lián)的內(nèi)存數(shù)據(jù)區(qū)。 寄存器變量是函數(shù)的內(nèi)部變量或參數(shù),也是一種臨時性的變量。如因函數(shù)使用非常頻繁程序希望將它分配在寄存器,程序就可將變量指定為寄存器的,但編譯系統(tǒng)也可能把它當(dāng)作動變量處理。 指定存儲類型是外部的,實際b是告訴編譯器,這個變量是一個外部變量,在這里要使它,而它的定義或在別的程序文件或在后面的程序段等別的地方。 4.變量的作用域和生存期 變量的使用要注意變量的作用域(可使用范圍)和生存期(存在的時間)。C語言規(guī)定,內(nèi)部變量的作用域只局限于定義它的函數(shù)或復(fù)合語句。自動的內(nèi)部變量是一種臨時性變量,函數(shù)被調(diào)用時分配,函數(shù)執(zhí)行結(jié)束時釋放。而靜態(tài)變量在程序執(zhí)行前分配,直至程序結(jié)束才釋放。由于靜態(tài)的內(nèi)部變量在函數(shù)結(jié)束時,依舊保持存儲,函數(shù)上一次調(diào)用時留在內(nèi)部靜態(tài)變量中的結(jié)果能被下一次調(diào)用時繼續(xù)使用。外部變量也在程序啟動前分配,直至程序執(zhí)行結(jié)束釋放。普通的外部變量能提供別的源程序文件中的函數(shù)使用(要對它作外部說明);靜態(tài)的外部變量只能供定義它的源程序中的全部函數(shù)專用。由于外部變量能供整個程序使用,所以外部量不能重名。 5.變量定義初始化 變量定義是對變量的存儲空間提出一種要求,存儲空間分配后,變量的初值通常是不拔的。但程序可以要求系統(tǒng)在為變量分配存儲空間同時為變量設(shè)定初值,這就是變量定義初始化。在變量的定義形式中,在變量名之后接上“=初值表達(dá)式”,該初值表達(dá)式的值就作為該變量的初值。C語言另有約定,對于靜態(tài)變量和外部變量,若定義它們時未指定初值,系統(tǒng)給它們設(shè)置成全部二進(jìn)位都是0的值。以下是各種變量定義的例子: �。╨)定義整型,并對其初始化。 Short minInt =100; int i= l,j= 2, k=3; long p=-1L,q=1234567890L; unsigned usi= 254u; unsigned long up= 4294967295UL; (2)定義字符型變量,并對其初始化。 char ch=‘A’; �。�3)定義實型(浮點型、雙精度型)變量,并對其初始化。 float f=1.23456f; double d=1.2345678op87654; 2.4 運算符 每個運算符都代表對運算對象的某種運算,都有自已特定的運算規(guī)則,規(guī)定運算對象的個數(shù)、運算對象數(shù)據(jù)類型,以及運算結(jié)果的數(shù)據(jù)類型。C語言還規(guī)定運算符有不同的優(yōu)先級和結(jié)合性。運算符的優(yōu)先級指表達(dá)式求值時,按運算符的優(yōu)先級由高到低的次序計算。如“先乘除后加減”。運算符的結(jié)合性是指運算符要求它的運算對象對它的結(jié)合方向。結(jié)合性確定了在相同優(yōu)先級運算符連續(xù)出現(xiàn)的情況下運算對象與運算符結(jié)合的順序,通常也是計算順序。如算術(shù)運算符的結(jié)合性是從左至右的,則連續(xù)的加減或連續(xù)的乘除是從左向右計算。而賦值運算符的結(jié)合性是從右至左的,則連續(xù)的賦值運算是從右向左逐個計算賦值。在C語言中,要特別注意某些運算符因運算對象數(shù)據(jù)類型不同,可能有不同的意義。 1.算術(shù)運算符 算術(shù)運算符的運算對象是基本數(shù)據(jù)類型的數(shù)據(jù),實現(xiàn)通常的取整、取負(fù)、四則運算、求兩整數(shù)相除后的余數(shù)的運算和增1減1運算。特別要留心的是整除運算、求余運算、增1運算和減1運算。 對兩個整型數(shù)據(jù)執(zhí)行除運算(/),稱為整除運算,要特別注意的是兩個整型數(shù)據(jù)的整除運算的結(jié)果是整型的,如表達(dá)式3/2的結(jié)果為1,表達(dá)式2/3的結(jié)果為0. 求余運算符(%)要求參與運算的兩個運算對象均為整型數(shù)據(jù),如 5% 3的值為 2.一般來說,求余運算所得結(jié)果的符號與被除數(shù)的符號相同。如-5%3的值為-2,5%-3的值為2. 增1(++)和減1(——)運算符都是單目運算符,以整型、字符型和指針型變量為運算對象,并改變運算對象的值。按它們出現(xiàn)在變量之前和之后兩種不同情況,其作用有微妙的差別。 前綴++ 前綴++的一般形式是 ++變量 例如,若X是整型或某種指針類型的變量,則++X使變量X的值增大1個單位,并以X的新值作為表達(dá)式“++X”的運算結(jié)果。如以下語句執(zhí)行前,變量X的值為1,語句 j= ++ x; 使變量X的值變成3,變量j的值也為3.這里所說的一個“單位”是指:如果X是整型的,則++x就是普通的解釋:“x的值比原值增加1”;x是指針,它指向數(shù)組的某個元素,則++x使它指向數(shù)組的后一個元素。 后綴++ 后綴++的一般形式是 變量++ 表達(dá)式“變量++”運算結(jié)果是該變量的原來值,在確定了表達(dá)式結(jié)果之后,用與前綴++相同的方式增大該變量的值1個單位。 前綴++和后綴++都能使變量的值增加1個單位,但是它們所代表的表達(dá)式的值卻不相同,前者是變量增加后的值,后者是變量還未增加的原先值。例如i,j為整型變量,且i的值為4,以下分別用①和②表記的代碼將使j獲得不同的值: �、賘=++i ; �、趈= i++ 都使變量i的值變?yōu)?,但①使j的值為5;②使j的值為4. 前綴—— 前綴—— 的一般形式是 ——變量 前綴——使變量的情減少(或后退)l個單位,并以變量的新值為表達(dá)式“——變量”的運算結(jié)果。 后綴—— 后綴—— 的一般形式是 變量—— 后綴—— 作用于變量時,以該變量的值作為表達(dá)式“變量——”的運算結(jié)果,即先取其值為結(jié)果,然后用與前綴——相同的方式減少該變量1個單位。 后綴—— 與前綴—— 的區(qū)別類似于后綴++與前綴++的區(qū)別。類似前面的例子,依舊假定i的值為4,兩代碼 �、踛= ——i ④j=i—— 都使變量i的值變?yōu)?,但③使j的值為3;④使j的值為4. 使用++和——運算符時,其運算對象僅適用于變量,不能是常量等數(shù)據(jù)值表達(dá)式。如 4++或(i+j)++都是不合法的。 ++和——是帶有副作用的運算符。建議讀者不要在一個表達(dá)式中對同一變量多次使用這樣的運算符,可能會發(fā)生意想不到的結(jié)果。如i的值為4,對表達(dá)式 �。╥++)+(i++) 可能認(rèn)為它的值為 9(+5)。然而在 TURBO C和MS C系統(tǒng)中,它的值為8.而表達(dá)式 �。�++i)+(++i) 的值為12.這是因為這些系統(tǒng)在處理 i++時,先使用 i的原值計算整個表達(dá)式,然后再讓i連續(xù)兩次自增;處理++i時,在計算表達(dá)式值之前,先對 i執(zhí)行兩次自增,然后才計算表達(dá)式。放前一個表達(dá)式的值為8,后一個表達(dá)式的值為12. 因+與++(-與——類似)是兩個不同運算符,對于類似表達(dá)式i+++j會有不同的理解:(i++)+ j或i+(++j)。 C編譯的處理方法是自左至右讓盡可能多的字符組成一個合法的句法單位(如標(biāo)識符、數(shù)字、運算符等)。因此,i+++j被解釋成(i++)+j,而不是i+(++j)。 增1(++)和減1(——)運算符的結(jié)合方向是自右至左的。 2.關(guān)系運算符 用于關(guān)系運算的關(guān)系運算符有六個:<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)和!=(不等)。關(guān)系運算是雙目運算,它的運算對象可以是基本數(shù)據(jù)類型的數(shù)據(jù),用于比較大��;或是指向同一個數(shù)組兩元素的指針,用于比較前后關(guān)系。在高級語言中,習(xí)慣稱條件滿足為“真”,不滿足為“假”。特別在C語言中約定:比較后,條件滿足(真)的值為1;比較后,條件不滿足(假)的值為兒用關(guān)系運算符將兩個子表達(dá)式連接起來,構(gòu)成關(guān)系比較表達(dá)式,求得結(jié)果為1(真)或0(假)。 六個關(guān)系運算符中,運算符(<、<=、>、>=)的優(yōu)先級高于運算符(==,!=)。如表達(dá)式X>y==C<d等價于表達(dá)式(X>y)==(C<d)。 另外,為便于描述兩個復(fù)雜算式的比較,關(guān)系運算符的優(yōu)先級低于算術(shù)運算符的優(yōu)先級。 設(shè)有i=1,j=2,k=3,則表達(dá)式i>j的值為“假”,即表達(dá)式的值為0;表達(dá)式i==k>j的值為“真”,即表達(dá)式的值為1(先計算k>j,其值為1,等于i);i+j<k的值為“假”,即表達(dá)式的值為0. 關(guān)系運算符的結(jié)合方向是自左至右。仍設(shè)i=1,j=2,k=3,則表達(dá)式k>j>i的值為0(先計算k>j,其值為1,再計算1>1,結(jié)果為0)。 3.邏輯運算符 用于邏輯運算的邏輯運算符有三個: �。ΓΓㄟ壿嬇c)、||(邏輯或)、�。ㄟ壿嫹牵� 其中運算符“&&”和“||”是雙目運算符,要求有兩個整型或字符型的運算對象,用于連接多個判定條件,構(gòu)成更復(fù)雜的條件判定;運算符“!”是單目運算符,用于描述對給定條件的否定判定。 邏輯運算產(chǎn)生的結(jié)果也只能是1或0. 1表示邏輯運算結(jié)果為“真”;用0表示運算結(jié)果為“假”。 在判定一個運算對象的值為“真”或“假”時,以運算對象的值不等于零為“真”,運算對象的值等于0為“假”。 邏輯運算符中,按優(yōu)先級排列為:邏輯非運算符!的優(yōu)先級高于邏輯與運算符&&,邏輯與運算符&&的優(yōu)先級高于邏輯或運算符||.另外,&&和||的優(yōu)先級低于關(guān)系運算符的優(yōu)先級;!的優(yōu)先級高于算術(shù)運算符的優(yōu)先級。邏輯運算符||和&&的結(jié)合方向是自左至右,而邏輯運算符!的結(jié)合方向是自有至左。 需要特別指出的是,“邏輯與”和“邏輯或”運算符分別有以下性質(zhì): a&&b,僅當(dāng)a為0時,不管b為何值(實際上不再計算b),結(jié)果為0. a||b,僅當(dāng) a為 1時,不管 b為何值(實際上不再計算 b),結(jié)果為1. 上述性質(zhì)就是說,對于表達(dá)式a&&b,僅當(dāng)子表達(dá)式a為非零時,才計算子表達(dá)式b;對于表達(dá)式a||b,僅當(dāng)子表達(dá)式a為0時,才計算子表達(dá)式b.在具體編寫程序時,也應(yīng)利用以上性質(zhì)。對于兩個條件的邏輯與,如當(dāng)條件1不成立情況下,條件2的值沒有意義或不可計算時,邏輯表達(dá)式應(yīng)寫成: 條件l&&條件2 避免在條件1不成立情況下,計算條件2.如有條件:y/x>2且 x�。�0,應(yīng)寫成: x!=0 && y/x>2 當(dāng)X為0時,不會計算y/X.而寫成: y/X>2 && X!=0 是不正確的,因為當(dāng) X為0時,不能計算y/X.對于邏輯或也有類似情況。 由于上述性質(zhì),在計算連續(xù)的邏輯與和邏輯或運算時,實際上不分優(yōu)先級,而是順序從左至右計算。在計算邏輯與運算時,若有左運算對象的值為0,則不再繼續(xù)計算邏輯與運算,并立即以0為邏輯與運算的結(jié)果;在計算邏輯或運算時,若有左運算對象的值為1,則不再繼續(xù)計算邏輯或運算,并立即以1為邏輯或運算的結(jié)果。在順序計算邏輯表達(dá)式的過程中,一旦確定了表達(dá)式的最終結(jié)果,就不再繼續(xù)計算。 4.賦值運算符 賦值運算的最簡單形式是 變量=表達(dá)式 其中“=”是賦值運算符。賦值運算的執(zhí)行過程是: �。╨)先計算賦值運算符右端的表達(dá)式; �。�2)如表達(dá)式的類型與賦值運算符左邊的變量類型不同(僅限于基本類型),將表達(dá)式值的類型自動轉(zhuǎn)換成變量的類型; �。�3)將求得的值賦給變量,即存儲到由變量所占的內(nèi)存中。 簡單地說,計算表達(dá)式的值,將該值賦給變量。 賦值運算也有結(jié)果,經(jīng)賦值運算后,賦值表達(dá)式具有賦值后賦位運算符左邊變量同樣的類型和值。因賦位運算有值,所以可以進(jìn)一步參與運算,特別是可以再賦植給其它變量。賦值運算符的結(jié)合性是‘邊有至左“的,當(dāng)連續(xù)有多個賦值運算時,則從右至左逐個賦值。如有變量定義: int k; double x; 則賦值表達(dá)式: x= k= 3.5 是先將實數(shù)3.5自動轉(zhuǎn)換成整數(shù)3賦給整型變量k,然后又將整數(shù)3自動轉(zhuǎn)換成實數(shù)3.0賦給實型變量X.所以,k的值是3,X的值是3.0. 在程序中,經(jīng)常遇到在變量當(dāng)前值的基礎(chǔ)上作某種修正的運算。如 x=x+5.0 這類運算的特點是:變量既是運算對象,又是賦值對象。為避免對同一存儲對象的地址重復(fù)計算,C語言弓隊復(fù)合賦值運算符。它們是 +=、-=、*=、%=、〈〈=、〉〉= 、&= 、^=、|= 通常,記日為某個雙目運算符,復(fù)合賦值運算 xθ=e 其等效的表達(dá)式為 x= xθ(e) 注意,當(dāng)e是一個復(fù)雜表達(dá)式時,等效表達(dá)式的括號是必需的。如 y*= a+b 的等效表達(dá)式是y= y*(a+b) 賦值運算符和所有復(fù)合賦值運算符的優(yōu)先級全相同,并且都是“自右至左”結(jié)合,它們的優(yōu)先級高于遠(yuǎn)號運算符的優(yōu)先級,低于其它所有運算符的優(yōu)先級。 5.逗號運算符 逗號運算符“,”用于將若干表達(dá)式連接起來順序地逐個計算。連續(xù)返號運算的一般形式為: 表達(dá)式1,表達(dá)式2,…,表達(dá)式n 它的計算順序是從左到右逐一計算各表達(dá)式,并以表達(dá)式n的值為連續(xù)逗號運算的結(jié)果。例如,表達(dá)式 x=( i=3, i*2) 使i等于3,X等于6.其實,逗號運算只是把多個表達(dá)式串聯(lián)起來,在許多情況下,使用逗號運算的目的只是想分別計算各個表達(dá)式的值,而并非想使用逗號運算中最后那個表達(dá)式的值。逗號運算最常用于for結(jié)構(gòu)中,用于給多個變量登初值,或用于對多個變量的值逐一修改等。逗號運算符的優(yōu)先級最低,其結(jié)合性是“自左向右”的。 6.條件運算符 條件運算是一個三目運算,有三個運算對象。條件運算的一般形式為 表達(dá)式1?表達(dá)式2:表達(dá)式3 條件運算的計算規(guī)則是: �。�1)計算表達(dá)式1的值; �。�2)如果表達(dá)式1的值非0(真),則計算表達(dá)式2,并以表達(dá)式2的值為條件運算的結(jié)果(不再計算表達(dá)式3); (3)如果表達(dá)式1的值為0(假),則計算表達(dá)式3,并以表達(dá)式3的值為條件運算的結(jié)果(不再計算表達(dá)式2)。 例如,表達(dá)式 X>y?X:y 如果x>y條件為真,則條件運算取x值,否則取y值。 條件運算符(?:)的優(yōu)先級高于賦值運算符,低于邏輯運算符,也低于關(guān)系運算符和算術(shù)運算符。例如,表達(dá)式 max= X> y?X: y+ l 等效于表達(dá)式 max=((x>y) ?x:( y+l)) 條件運算符的結(jié)合性為“自右至左”。例如,表達(dá)式X>y?X:u>V?u:V 等效于表達(dá)式 X>y?X:(u>V?u:V) 7.長度運算符 長度運算以字節(jié)為單位給出其運算對象所需(或所占)的字節(jié)數(shù),運算對象可以是任何類型的數(shù)據(jù)對象或數(shù)據(jù)類型。它是根據(jù)對象的類型來確定對象(所需)的字節(jié)數(shù)的。 長度運算有兩種書寫形式: sizeof變量名或sizeof(類型名) 如果有某種類型為江的變量V,其中t可以是系統(tǒng)提供的類型或用戶自己定義的類型,可以是簡單的,也可以是數(shù)組、結(jié)構(gòu)等。則 sizeof V就是變量 V所占的字節(jié)數(shù)。如有 int j; double x; 表達(dá)式sizeof j和sizeOf x分別是變量j和x所占的字節(jié)數(shù)。 sizeof(t)是系統(tǒng)為分配一個類型為t的數(shù)據(jù)對象所需的字節(jié)數(shù)。如sizeOf(int)和sizeof(dou-ble)分別是系統(tǒng)為分配一個類型為int和double變量所需的字節(jié)數(shù)。 |
熱門資料下載: |
< |
自考最新熱貼: |
【責(zé)任編輯:育路編輯 糾錯】 |
|
閱讀上一篇:高級語言程序設(shè)計知識點總結(jié)三 |
|
閱讀下一篇:高級語言程序設(shè)計知識點總結(jié)五 |
【育路網(wǎng)版權(quán)與免責(zé)聲明】 | |
① 凡本網(wǎng)注明稿件來源為"原創(chuàng)"的所有文字、圖片和音視頻稿件,版權(quán)均屬本網(wǎng)所有。任何媒體、網(wǎng)站或個人轉(zhuǎn)載、鏈接、轉(zhuǎn)貼或以其他方式復(fù)制發(fā)表時必須注明"稿件來源:育路網(wǎng)",違者本網(wǎng)將依法追究責(zé)任; | |
② 本網(wǎng)部分稿件來源于網(wǎng)絡(luò),任何單位或個人認(rèn)為育路網(wǎng)發(fā)布的內(nèi)容可能涉嫌侵犯其合法權(quán)益,應(yīng)該及時向育路網(wǎng)書面反饋,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)情況證明,育路網(wǎng)在收到上述法律文件后,將會盡快移除被控侵權(quán)內(nèi)容。 |
熱點專題 |
·重慶:2011年自考各專業(yè)課程考試安排表 |
·浙江:7月7.41萬人參加自學(xué)考試 |
·廣州:2010年10月自考報名通知 |
·同濟(jì)大學(xué):2010年上半年自考畢業(yè)證發(fā)放 |
·陜西:2011年自學(xué)考試共開考96個專業(yè) |
·山東:64所院校將進(jìn)行自考實踐課程試點 |
·萬州區(qū):2010年10月自考報名時間通知 |
·北京:2010年建成自考標(biāo)準(zhǔn)化考點試點 |
·江蘇(南京)2010年7月自考成績查詢 |
·湖北:2010年7月自考成績查詢 |
誠聘英才 | 廣告招商 | 關(guān)于網(wǎng)站 | 聯(lián)系我們 | 地方加盟 | 商務(wù)合作 | 投訴建議 | 老師加盟 | 客服中心 | 網(wǎng)站地圖 | 學(xué)校中心 |
學(xué)員報名服務(wù)中心: 北京北三環(huán)西路32號恒潤中心18層1803室(交通位置圖) |
咨詢電話:北京- 010-51268840/41 傳真:010-51418040 上海- 021-51567016/17 |
本站法律顧問:邱清榮律師 |
1999-2010 育路教育版權(quán)所有| 京ICP證100429號 |