第2章 標(biāo)記、類型與表達(dá)式_第1頁
第2章 標(biāo)記、類型與表達(dá)式_第2頁
第2章 標(biāo)記、類型與表達(dá)式_第3頁
第2章 標(biāo)記、類型與表達(dá)式_第4頁
第2章 標(biāo)記、類型與表達(dá)式_第5頁
已閱讀5頁,還剩105頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第2章章 標(biāo)記、類型與表達(dá)式標(biāo)記、類型與表達(dá)式2.1 標(biāo)記標(biāo)記 標(biāo)記標(biāo)記(token)是具有唯一含義的語言的是具有唯一含義的語言的最小單位,分為五種:最小單位,分為五種:關(guān)鍵字關(guān)鍵字(keyword)標(biāo)識(shí)符標(biāo)識(shí)符(identifier)常量常量(constant)串字面量串字面量(string literal)標(biāo)點(diǎn)符號(hào)標(biāo)點(diǎn)符號(hào)(punctuator)一、關(guān)鍵字一、關(guān)鍵字 關(guān)鍵字也稱為保留字,所有關(guān)鍵字都有關(guān)鍵字也稱為保留字,所有關(guān)鍵字都有固定的含義,且其含義不可改變固定的含義,且其含義不可改變 C語言共有語言共有44個(gè)關(guān)鍵字:個(gè)關(guān)鍵字:autoexternshortwhilebreakflo

2、atsigned_Alignascaseforsizeof_Alignofchargotostatic_Atomicconstifstruct_Boolcontinueinlineswitch_Complexdefaultinttypedef_Genericdolongunion_Imaginarydoubleregisterunsigned_Noreturnelserestrictvoid_Static_assertenumreturnvolatile_Thread_local二、標(biāo)識(shí)符二、標(biāo)識(shí)符 標(biāo)識(shí)符用于表示程序中的標(biāo)識(shí)符用于表示程序中的對(duì)象對(duì)象(object)函數(shù)函數(shù)(function

3、)結(jié)構(gòu)體結(jié)構(gòu)體(structure)的標(biāo)記的標(biāo)記(tag)或成員或成員(member)共同體共同體(union)的標(biāo)記或成員的標(biāo)記或成員枚舉枚舉(enumeration)的標(biāo)記或成員的標(biāo)記或成員typedef名名(typedef name)標(biāo)號(hào)名標(biāo)號(hào)名(label name)宏名宏名(macro name)宏參數(shù)宏參數(shù)(macro parameter) 標(biāo)識(shí)符由小寫字母、大寫字母、數(shù)字、標(biāo)識(shí)符由小寫字母、大寫字母、數(shù)字、下畫線、通用字符名下畫線、通用字符名(universal character name)或?qū)崿F(xiàn)定義的字符或?qū)崿F(xiàn)定義的字符(implementation-defined char

4、acter)構(gòu)成構(gòu)成 注意:注意:數(shù)字不能作為標(biāo)識(shí)符的第一個(gè)字符數(shù)字不能作為標(biāo)識(shí)符的第一個(gè)字符關(guān)鍵字不能作為標(biāo)識(shí)符關(guān)鍵字不能作為標(biāo)識(shí)符 標(biāo)識(shí)符的例子:標(biāo)識(shí)符的例子:areaPerimeter_3wu03b1w VC允許在標(biāo)識(shí)符中使用允許在標(biāo)識(shí)符中使用$,因此,因此,$123在在VC中是標(biāo)識(shí)符中是標(biāo)識(shí)符 不是標(biāo)識(shí)符的例子:不是標(biāo)識(shí)符的例子:6abccheck-itemint 大寫字母和小寫字母是有區(qū)別的,即所大寫字母和小寫字母是有區(qū)別的,即所謂大小寫敏感謂大小寫敏感Ageage C語言對(duì)標(biāo)識(shí)符的最大長度沒有具體的語言對(duì)標(biāo)識(shí)符的最大長度沒有具體的限制,限制,VC允許標(biāo)識(shí)符的最大長度為允許標(biāo)識(shí)符的最

5、大長度為247個(gè)個(gè)字符字符 應(yīng)該選擇相應(yīng)的英文單詞或其縮寫作為應(yīng)該選擇相應(yīng)的英文單詞或其縮寫作為標(biāo)識(shí)符,做到見名知義標(biāo)識(shí)符,做到見名知義 表示長方體的長、寬、高表示長方體的長、寬、高abclengthwidthheight(更合適更合適)三、常量三、常量 在程序運(yùn)行過程中,其值不變的量稱為在程序運(yùn)行過程中,其值不變的量稱為常量。常量分為四種類型:常量。常量分為四種類型:整數(shù)常量整數(shù)常量(integer constant)浮點(diǎn)常量浮點(diǎn)常量(floating constant)枚舉常量枚舉常量(enumeration constant)字符常量字符常量(character constant)1、整

6、數(shù)常量、整數(shù)常量 整數(shù)包括正整數(shù)、零和負(fù)整數(shù)整數(shù)包括正整數(shù)、零和負(fù)整數(shù) 整數(shù)常量只包括正整數(shù)和零,不包括負(fù)整數(shù)常量只包括正整數(shù)和零,不包括負(fù)整數(shù)。整數(shù)常量分為:整數(shù)。整數(shù)常量分為:十進(jìn)制整數(shù)常量十進(jìn)制整數(shù)常量八進(jìn)制整數(shù)常量八進(jìn)制整數(shù)常量十六進(jìn)制整數(shù)常量十六進(jìn)制整數(shù)常量 十進(jìn)制整數(shù)常量由十進(jìn)制整數(shù)常量由 09 組成,且以非組成,且以非零數(shù)字開頭零數(shù)字開頭1231000 八進(jìn)制整數(shù)常量由八進(jìn)制整數(shù)常量由 07 組成,且以組成,且以 0 開頭,開頭,或者只有一個(gè)或者只有一個(gè) 00170 十六進(jìn)制整數(shù)常量由十六進(jìn)制整數(shù)常量由 AF(或或af)、09 組成,且以組成,且以 0 x 或或 0X 開頭開頭0

7、 x1a0XD5 注:課本有誤,注:課本有誤,0 是是八進(jìn)制整數(shù)常量八進(jìn)制整數(shù)常量,不是十進(jìn)制整數(shù)常量不是十進(jìn)制整數(shù)常量 以下內(nèi)容來自以下內(nèi)容來自C11原文原文decimal-constant:nonzero-digitdecimal-constant digitoctal-constant:0octal-constant octal-digitnonzero-digit: one of1 2 3 4 5 6 7 8 9octal-digit: one of0 1 2 3 4 5 6 7 A decimal constant begins with a nonzero digit and co

8、nsists of a sequence of decimal digits. An octal constant consists of the prefix 0 optionally followed by a sequence of the digits 0 through 7 only.【例例2.1】 八進(jìn)制、十進(jìn)制、十六進(jìn)制整數(shù)八進(jìn)制、十進(jìn)制、十六進(jìn)制整數(shù)常量之間的混合運(yùn)算常量之間的混合運(yùn)算#include int main(void) printf(sum = %dn, 014 + 12 + 0 xc); return 0;2、浮點(diǎn)常量、浮點(diǎn)常量 數(shù)學(xué)中的實(shí)數(shù)包括有理數(shù)和無理數(shù)。其

9、數(shù)學(xué)中的實(shí)數(shù)包括有理數(shù)和無理數(shù)。其中,有理數(shù)包括整數(shù)和分?jǐn)?shù);無理數(shù)是無中,有理數(shù)包括整數(shù)和分?jǐn)?shù);無理數(shù)是無限不循環(huán)小數(shù)限不循環(huán)小數(shù) 計(jì)算機(jī)中的浮點(diǎn)數(shù)計(jì)算機(jī)中的浮點(diǎn)數(shù)(floating-point number)只能近似地表示值在某個(gè)范圍之只能近似地表示值在某個(gè)范圍之內(nèi)的有理數(shù)和一些特殊值,如內(nèi)的有理數(shù)和一些特殊值,如NAN(非數(shù)值非數(shù)值)、+INF(正無窮大正無窮大)、-INF(負(fù)無窮大負(fù)無窮大)等等 浮點(diǎn)常量是非負(fù)的浮點(diǎn)數(shù),其十進(jìn)制書浮點(diǎn)常量是非負(fù)的浮點(diǎn)數(shù),其十進(jìn)制書寫形式有兩種:寫形式有兩種:小數(shù)表示法小數(shù)表示法 由數(shù)字由數(shù)字09和小數(shù)點(diǎn)組成,必須有小數(shù)點(diǎn)和小數(shù)點(diǎn)組成,必須有小數(shù)點(diǎn)123.

10、00.4520.01.25123.4520.0指數(shù)表示法指數(shù)表示法60000.0的指數(shù)表示法為的指數(shù)表示法為6E40.000035的指數(shù)表示法為的指數(shù)表示法為3.5e-5十進(jìn)制整數(shù)常量十進(jìn)制整數(shù)常量E符號(hào)位符號(hào)位 十進(jìn)制整數(shù)常量十進(jìn)制整數(shù)常量浮點(diǎn)常量的小數(shù)表示法浮點(diǎn)常量的小數(shù)表示法E符號(hào)位符號(hào)位 十進(jìn)制整數(shù)常量十進(jìn)制整數(shù)常量3、枚舉常量、枚舉常量 枚舉常量是類型為枚舉常量是類型為int的標(biāo)識(shí)符的標(biāo)識(shí)符4、字符常量、字符常量 ASCII碼碼-American Standard Code for Information Interchange 字符常量分為:字符常量分為:整數(shù)字符常量整數(shù)字符常量(

11、integer character constant)寬字符常量寬字符常量(wide character constant) 整數(shù)字符常量是由一對(duì)單引號(hào)括起來的整數(shù)字符常量是由一對(duì)單引號(hào)括起來的一個(gè)或多個(gè)字符,其類型為一個(gè)或多個(gè)字符,其類型為int,在內(nèi)存中,在內(nèi)存中占占4個(gè)字節(jié)個(gè)字節(jié)aababc 本本課程討論的字符常量是指單引號(hào)內(nèi)只課程討論的字符常量是指單引號(hào)內(nèi)只有一個(gè)字符的整數(shù)字符常量有一個(gè)字符的整數(shù)字符常量 單引號(hào)內(nèi)的字符可以是普通字符單引號(hào)內(nèi)的字符可以是普通字符?A09 printf(%d, %d, %d, %d, A, b + 2, 0, 1 + 3); 單引號(hào)內(nèi)的字符還可以是轉(zhuǎn)義序

12、列單引號(hào)內(nèi)的字符還可以是轉(zhuǎn)義序列(escape sequence)141x61u03b1四、串字面量四、串字面量 串字面量分為三種:串字面量分為三種:字符串字面量字符串字面量(character string literal)UTF-8串字面量串字面量(UTF-8 string literal)寬串字面量寬串字面量(wide string literal) 本課程僅討論字符串字面量本課程僅討論字符串字面量 字符串字面量是用一對(duì)雙引號(hào)括起來的字符串字面量是用一對(duì)雙引號(hào)括起來的零個(gè)或多個(gè)字符零個(gè)或多個(gè)字符 在翻譯的第七個(gè)階段,空字符在翻譯的第七個(gè)階段,空字符(null character)即即 0

13、 被加到字符串字面量的末被加到字符串字面量的末尾,然后字符串字面量以數(shù)組元素類型為尾,然后字符串字面量以數(shù)組元素類型為char的數(shù)組的形式存儲(chǔ)在內(nèi)存中的數(shù)組的形式存儲(chǔ)在內(nèi)存中 如果字符串字面量中不含如果字符串字面量中不含0,則該字,則該字符串字面量又稱為字符串符串字面量又稱為字符串(character string),即字符串是以空字符,即字符串是以空字符0結(jié)束的連結(jié)束的連續(xù)字符序列續(xù)字符序列ab0c 是字符串字面量,但不是字符串是字符串字面量,但不是字符串a(chǎn)bc 既是字符串字面量,又是字符串既是字符串字面量,又是字符串 字符串的長度是指空字符前的字符在內(nèi)字符串的長度是指空字符前的字符在內(nèi)存中

14、所占的字節(jié)數(shù)。因此,長度為存中所占的字節(jié)數(shù)。因此,長度為n的字符的字符串,在內(nèi)存中占串,在內(nèi)存中占n + 1個(gè)字節(jié)個(gè)字節(jié)字符串字符串字符串的長度字符串的長度占用內(nèi)存占用內(nèi)存/字節(jié)字節(jié)01 12hello56hellon67hx65llon67c是字符常量,占是字符常量,占4個(gè)字節(jié)個(gè)字節(jié)c是字符串,占是字符串,占2個(gè)字節(jié)個(gè)字節(jié)【例【例2.2】 輸出字符串輸出字符串#include int main(void) printf(12345678901234567890n); printf(abcnabdbcn); printf(efgr); printf(110 x49tijkn); return

15、0;五、標(biāo)點(diǎn)符號(hào)五、標(biāo)點(diǎn)符號(hào)2.2 類型類型 類型類型(type)分為:分為:基本類型基本類型(basic type)枚舉類型枚舉類型(enumerated type)空類型空類型(void)派生類型派生類型(derived type) 基本類型分為四種:基本類型分為四種: char有符號(hào)整數(shù)類型有符號(hào)整數(shù)類型(signed integer type)標(biāo)準(zhǔn)有符號(hào)整數(shù)類型標(biāo)準(zhǔn)有符號(hào)整數(shù)類型(standard signed integer type)擴(kuò)展有符號(hào)整數(shù)類型擴(kuò)展有符號(hào)整數(shù)類型(extended signed integer type)無符號(hào)整數(shù)類型無符號(hào)整數(shù)類型(unsigned int

16、eger type)標(biāo)準(zhǔn)無符號(hào)整數(shù)類型標(biāo)準(zhǔn)無符號(hào)整數(shù)類型(standard unsigned integer type)擴(kuò)展無符號(hào)整數(shù)類型擴(kuò)展無符號(hào)整數(shù)類型(extended unsigned integer type)浮點(diǎn)類型浮點(diǎn)類型(floating type)實(shí)數(shù)浮點(diǎn)類型實(shí)數(shù)浮點(diǎn)類型(real floating type)復(fù)數(shù)類型復(fù)數(shù)類型(complex type) 在聲明在聲明(declaration)中必須使用類型中必須使用類型說明符說明符(type specifier) 本節(jié)中用斜體字表示類型說明符,例如:本節(jié)中用斜體字表示類型說明符,例如:charsigned charint 或

17、或 signed 或或 signed intunsigned charunsigned 或或 unsigned intfloatdouble 字符類型字符類型(character type)包括:包括:charsigned charunsigned char 整數(shù)類型整數(shù)類型(integer type)包括:包括:char枚舉類型枚舉類型有符號(hào)整數(shù)類型有符號(hào)整數(shù)類型無符號(hào)整數(shù)類型無符號(hào)整數(shù)類型 實(shí)數(shù)類型實(shí)數(shù)類型(real type)包括:包括:整數(shù)類型整數(shù)類型實(shí)數(shù)浮點(diǎn)類型實(shí)數(shù)浮點(diǎn)類型 算數(shù)類型算數(shù)類型(arithmetic type)包括:包括:整數(shù)類型整數(shù)類型浮點(diǎn)類型浮點(diǎn)類型2.3 變量與常

18、用類型說明符變量與常用類型說明符一、變量一、變量 對(duì)象對(duì)象(object)是執(zhí)行環(huán)境中的數(shù)據(jù)存儲(chǔ)是執(zhí)行環(huán)境中的數(shù)據(jù)存儲(chǔ)區(qū),其內(nèi)容表示值區(qū),其內(nèi)容表示值 變量變量(variable)是有名字的對(duì)象是有名字的對(duì)象 變量聲明變量聲明(variable declaration)的簡單的簡單形式:形式:類型說明符類型說明符 變量名變量名1 , 變量名變量名2, , 變量名變量名n; 其中,變量名是一個(gè)標(biāo)識(shí)符其中,變量名是一個(gè)標(biāo)識(shí)符int area;int length, width; 變量必須先聲明后使用變量必須先聲明后使用 C語言允許在程序的任何位置聲明變量,語言允許在程序的任何位置聲明變量,只要滿足

19、先聲明后使用的原則即可只要滿足先聲明后使用的原則即可 VC要求函數(shù)內(nèi)的變量聲明必須緊接在要求函數(shù)內(nèi)的變量聲明必須緊接在開始大括號(hào)之后開始大括號(hào)之后【例例2.3】 變量聲明的位置變量聲明的位置#include int main(void) int length, width; length = 10; width = 8; int area; / 符合符合C語言的語法,但在語言的語法,但在VC中是錯(cuò)誤的中是錯(cuò)誤的 area = length * width; printf(area = %dn, area); return 0;#include int main(void) int length

20、, width, area; length = 10; width = 8; area = length * width; printf(area = %dn, area); return 0;二、二、int 類型類型 int 屬于整數(shù)類型屬于整數(shù)類型 在不同的在不同的C編譯系統(tǒng)中,編譯系統(tǒng)中,int 類型的數(shù)類型的數(shù)據(jù)所占用的內(nèi)存大小不同,能表示的數(shù)據(jù)據(jù)所占用的內(nèi)存大小不同,能表示的數(shù)據(jù)范圍也不同范圍也不同 在在VC中,中,int 類型的數(shù)據(jù)占類型的數(shù)據(jù)占 4 個(gè)字節(jié),個(gè)字節(jié),能表示的數(shù)據(jù)范圍是能表示的數(shù)據(jù)范圍是-231231-1即:即:-21474836482147483647【例【例2.

21、4】 int 類型數(shù)據(jù)的溢出類型數(shù)據(jù)的溢出#include int main(void) int x, y; x = 2147483646 + 1; y = 2147483646 + 2;/ 溢出溢出 printf(x = %dn, x); printf(y = %dn, y); return 0;三、三、char 類型類型 char 屬于整數(shù)類型屬于整數(shù)類型 char 類型的數(shù)據(jù)占類型的數(shù)據(jù)占1個(gè)字節(jié)個(gè)字節(jié) 在在VC中,中,char類型的數(shù)據(jù)默認(rèn)能表示類型的數(shù)據(jù)默認(rèn)能表示的數(shù)據(jù)范圍是的數(shù)據(jù)范圍是 -128127【例【例2.5】 使用庫函數(shù)使用庫函數(shù) putchar 輸出字符輸出字符#incl

22、ude int main(void) char ch; ch = c; putchar(ch); putchar(o); putchar(155); putchar(n); return 0;【例【例2.6】 使用庫函數(shù)使用庫函數(shù) getchar 輸入小寫字輸入小寫字母,輸出其對(duì)應(yīng)的大寫字母母,輸出其對(duì)應(yīng)的大寫字母#include int main(void) char ch; ch = getchar(); putchar(ch - 32); putchar(n); return 0; 【例【例2.7】 輸入兩個(gè)數(shù)字字符,求其和輸入兩個(gè)數(shù)字字符,求其和并輸出并輸出char ch1, ch2;

23、int n1, n2, sum;ch1 = getchar();ch2 = getchar();n1 = ch1 - 0;n2 = ch2 - 0;sum = n1 + n2;printf(sum = %dn, sum);四、四、float 類型和類型和 double 類型類型 float 和和 double 都屬于實(shí)數(shù)浮點(diǎn)類型都屬于實(shí)數(shù)浮點(diǎn)類型 雙精度浮點(diǎn)類型雙精度浮點(diǎn)類型 double 比單精度浮點(diǎn)比單精度浮點(diǎn)類型類型 float 的精度更高,表示數(shù)據(jù)的范圍更的精度更高,表示數(shù)據(jù)的范圍更大大 在不同的在不同的C編譯系統(tǒng)中,編譯系統(tǒng)中,float 類型的類型的數(shù)據(jù)和數(shù)據(jù)和 double 類型

24、的數(shù)據(jù)所占用的內(nèi)存大類型的數(shù)據(jù)所占用的內(nèi)存大小不同,能表示的數(shù)據(jù)范圍也不同小不同,能表示的數(shù)據(jù)范圍也不同在在VC中,中, float 和和 double 的區(qū)別的區(qū)別float類型數(shù)據(jù)類型數(shù)據(jù)double類型數(shù)據(jù)類型數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)長度長度4字節(jié)字節(jié)8字節(jié)字節(jié)最小最小正值正值1382.225073858507201410-308最大最大正值正值3.40282346610381.797693134862315810308精度精度 6位位15位位 浮點(diǎn)常量默認(rèn)是浮點(diǎn)常量默認(rèn)是 double 類型,在浮點(diǎn)類型,在浮點(diǎn)常量后加后綴常量后加后綴 f 或或 F 則是則是 float

25、類型類型7.45/ double 類型類型7.45f/ float 類型類型7.45F/ float 類型類型 在在VC中,將中,將double類型的浮點(diǎn)常量存類型的浮點(diǎn)常量存放到放到float類型的變量中,會(huì)產(chǎn)生警告:類型的變量中,會(huì)產(chǎn)生警告:truncation from const double to floatfloat price;price = 7.45;/ 產(chǎn)生警告產(chǎn)生警告double price;price = 7.45;float price;price = 7.45f;2.4 運(yùn)算符與表達(dá)式運(yùn)算符與表達(dá)式一、表達(dá)式一、表達(dá)式 表達(dá)式表達(dá)式(expression)是由運(yùn)算符是

26、由運(yùn)算符(operator)和運(yùn)算對(duì)象和運(yùn)算對(duì)象(operand)構(gòu)成的序構(gòu)成的序列。表達(dá)式具有以下一個(gè)或多個(gè)功能:列。表達(dá)式具有以下一個(gè)或多個(gè)功能:描述一個(gè)值的計(jì)算描述一個(gè)值的計(jì)算指定一個(gè)對(duì)象或一個(gè)函數(shù)指定一個(gè)對(duì)象或一個(gè)函數(shù)產(chǎn)生副作用產(chǎn)生副作用(side effect) 訪問易變對(duì)象訪問易變對(duì)象(volatile object),修改,修改對(duì)象或文件對(duì)象或文件(file),或者調(diào)用包含這些操作,或者調(diào)用包含這些操作的函數(shù)的函數(shù)(function)都是副作用都是副作用 基本表達(dá)式基本表達(dá)式(primary expression)包括:包括:標(biāo)識(shí)符標(biāo)識(shí)符常量常量串字面量串字面量用小括號(hào)括起來的表

27、達(dá)式用小括號(hào)括起來的表達(dá)式generic選擇選擇 根據(jù)運(yùn)算符的運(yùn)算對(duì)象的數(shù)量,可將運(yùn)根據(jù)運(yùn)算符的運(yùn)算對(duì)象的數(shù)量,可將運(yùn)算符分為:算符分為:單目運(yùn)算符單目運(yùn)算符(unary operator)雙目運(yùn)算符雙目運(yùn)算符(binary operator)三目運(yùn)算符三目運(yùn)算符(ternary operator)二、乘法類運(yùn)算符二、乘法類運(yùn)算符 乘法類運(yùn)算符乘法類運(yùn)算符(multiplicative operators)有三個(gè),分別是:有三個(gè),分別是:乘法運(yùn)算符乘法運(yùn)算符 *除法運(yùn)算符除法運(yùn)算符 /模運(yùn)算符模運(yùn)算符(又稱求余數(shù)運(yùn)算符又稱求余數(shù)運(yùn)算符) % 乘法類運(yùn)算符都是雙目運(yùn)算符乘法類運(yùn)算符都是雙目運(yùn)算符

28、5.0 / 2.0 的值是的值是 2.55.0 / 2的值是的值是 2.55 / 2.0的值是的值是 2.55 / 2的值是的值是 28 / -3的值是的值是 -2表達(dá)式表達(dá)式 5.0 / 2.0的值是的值是 2.5表達(dá)式表達(dá)式 5.0 / 2的值是的值是 2.5表達(dá)式表達(dá)式 5 / 2.0的值是的值是 2.5表達(dá)式表達(dá)式 5 / 2的值是的值是 2表達(dá)式表達(dá)式 8 / -3的值是的值是 -2表達(dá)式表達(dá)式 5.0 % 2.0 錯(cuò)誤錯(cuò)誤表達(dá)式表達(dá)式 5.0 % 2錯(cuò)誤錯(cuò)誤表達(dá)式表達(dá)式 5 % 2.0錯(cuò)誤錯(cuò)誤表達(dá)式表達(dá)式 5 % 2的值是的值是 1表達(dá)式表達(dá)式 8 % -3的值是的值是 2三、加法

29、類運(yùn)算符三、加法類運(yùn)算符 加法類運(yùn)算符加法類運(yùn)算符(addtive operators)有兩有兩個(gè),分別是:個(gè),分別是:加法運(yùn)算符加法運(yùn)算符 +減法運(yùn)算符減法運(yùn)算符 - 加法類運(yùn)算符都是雙目運(yùn)算符加法類運(yùn)算符都是雙目運(yùn)算符四、運(yùn)算符的優(yōu)先級(jí)與結(jié)合性四、運(yùn)算符的優(yōu)先級(jí)與結(jié)合性 優(yōu)先級(jí)優(yōu)先級(jí)(precedence)高的運(yùn)算符先綁高的運(yùn)算符先綁定定(binding)運(yùn)算對(duì)象運(yùn)算對(duì)象6 + 2 * 5 結(jié)合性結(jié)合性(associativity)分兩種:分兩種:左結(jié)合性左結(jié)合性(left-associativity)右結(jié)合性右結(jié)合性(right-associativity) 優(yōu)先級(jí)相同的運(yùn)算符按結(jié)合性綁

30、定運(yùn)算優(yōu)先級(jí)相同的運(yùn)算符按結(jié)合性綁定運(yùn)算對(duì)象,左結(jié)合性指左邊的運(yùn)算符先綁定運(yùn)對(duì)象,左結(jié)合性指左邊的運(yùn)算符先綁定運(yùn)算對(duì)象,依次向右進(jìn)行;右結(jié)合性指右邊算對(duì)象,依次向右進(jìn)行;右結(jié)合性指右邊的運(yùn)算符先綁定運(yùn)算對(duì)象,依次向左進(jìn)行的運(yùn)算符先綁定運(yùn)算對(duì)象,依次向左進(jìn)行6 - 3 + 53 + 7 - 2 * 53 + 7 - (2 * 5)(3 + 7) - (2 * 5)五、五、sizeof 運(yùn)算符運(yùn)算符 sizeof 運(yùn)算符是單目運(yùn)算符,表達(dá)式運(yùn)算符是單目運(yùn)算符,表達(dá)式的值是運(yùn)算對(duì)象所占內(nèi)存大小的值是運(yùn)算對(duì)象所占內(nèi)存大小(按字節(jié)計(jì)算按字節(jié)計(jì)算),其運(yùn)算對(duì)象是表達(dá)式或用小括號(hào)括起來的其運(yùn)算對(duì)象是表達(dá)式或

31、用小括號(hào)括起來的類型名類型名printf(sizeof(char) = %dn, sizeof(char);printf(sizeof(int) = %dn, sizeof(int);printf(sizeof(float) = %dn, sizeof(float);printf(sizeof(double) = %dn, sizeof(double);printf(sizeof 5 = %dn, sizeof 5); printf(sizeof A = %dn, sizeof A);printf(sizeof 5.0f = %dn, sizeof 5.0f);printf(sizeof 5.

32、0 = %dn, sizeof 5.0);printf(sizeof hello = %dn, sizeof hello);int n;printf(sizeof n = %dn, sizeof n);printf(sizeof 2 + 3 = %dn, sizeof 2 + 3);printf(sizeof(2 + 3) = %dn, sizeof(2 + 3);六、一元加運(yùn)算符與一元減運(yùn)算符六、一元加運(yùn)算符與一元減運(yùn)算符一元加運(yùn)算符一元加運(yùn)算符(unary plus operator) + 是是單目運(yùn)算符,表達(dá)式的值是運(yùn)算對(duì)象的值單目運(yùn)算符,表達(dá)式的值是運(yùn)算對(duì)象的值一元減運(yùn)算符一元減運(yùn)算符

33、(unary minus operator) - 是單目運(yùn)算符,表達(dá)式的值是運(yùn)算對(duì)象的是單目運(yùn)算符,表達(dá)式的值是運(yùn)算對(duì)象的相反數(shù)相反數(shù) 如果運(yùn)算對(duì)象是整數(shù)類型,要先對(duì)運(yùn)算如果運(yùn)算對(duì)象是整數(shù)類型,要先對(duì)運(yùn)算對(duì) 象 的 值 進(jìn) 行 整 數(shù) 提 升對(duì) 象 的 值 進(jìn) 行 整 數(shù) 提 升 ( i n t e g e r promotions),表達(dá)式的類型是提升以后的,表達(dá)式的類型是提升以后的類型類型 對(duì)于常用類型對(duì)于常用類型char、int、float和和double,只有,只有char類型的值需要整數(shù)提升,類型的值需要整數(shù)提升,即將即將char類型的值轉(zhuǎn)換為類型的值轉(zhuǎn)換為int類型的值類型的值ch

34、ar ch; printf(sizeof +ch = %dn, sizeof +ch);printf(sizeof ch = %dn, sizeof ch);printf(sizeof -ch = %dn, sizeof -ch);printf(sizeof ch = %dn, sizeof ch);七、常用算術(shù)轉(zhuǎn)換七、常用算術(shù)轉(zhuǎn)換 乘法類運(yùn)算符的運(yùn)算對(duì)象要執(zhí)行常用算乘法類運(yùn)算符的運(yùn)算對(duì)象要執(zhí)行常用算術(shù)轉(zhuǎn)換術(shù)轉(zhuǎn)換(usual arithmetic conversions) 如果加法類運(yùn)算符的兩個(gè)運(yùn)算對(duì)象都是如果加法類運(yùn)算符的兩個(gè)運(yùn)算對(duì)象都是算術(shù)類型,也要執(zhí)行常用算術(shù)轉(zhuǎn)換算術(shù)類型,也要執(zhí)行常用算

35、術(shù)轉(zhuǎn)換 對(duì)于常用類型對(duì)于常用類型char、int、float和和double,常用算術(shù)轉(zhuǎn)換的含義如下:常用算術(shù)轉(zhuǎn)換的含義如下:如果其中一個(gè)運(yùn)算對(duì)象是如果其中一個(gè)運(yùn)算對(duì)象是double類型,另一個(gè)類型,另一個(gè)運(yùn)算對(duì)象的值被轉(zhuǎn)換為運(yùn)算對(duì)象的值被轉(zhuǎn)換為double類型的值類型的值如果以上條件不滿足,并且其中一個(gè)運(yùn)算對(duì)象如果以上條件不滿足,并且其中一個(gè)運(yùn)算對(duì)象是是float類型,另一個(gè)運(yùn)算對(duì)象的值被轉(zhuǎn)換為類型,另一個(gè)運(yùn)算對(duì)象的值被轉(zhuǎn)換為float類型的值類型的值如果以上兩個(gè)條件不滿足,對(duì)兩個(gè)運(yùn)算對(duì)象進(jìn)如果以上兩個(gè)條件不滿足,對(duì)兩個(gè)運(yùn)算對(duì)象進(jìn)行整數(shù)提升,即行整數(shù)提升,即char類型運(yùn)算對(duì)象的值被轉(zhuǎn)換為類

36、型運(yùn)算對(duì)象的值被轉(zhuǎn)換為int類型的值類型的值char ch1, ch2;int i;float f1, f2;double d;表達(dá)式表達(dá)式 ch1 + d表達(dá)式表達(dá)式 f1 + f2表達(dá)式表達(dá)式 i * ch1表達(dá)式表達(dá)式 ch1 - ch2八、賦值運(yùn)算符八、賦值運(yùn)算符 賦值運(yùn)算符賦值運(yùn)算符(assignment operators)是雙目運(yùn)算符,分為兩種:是雙目運(yùn)算符,分為兩種:簡單賦值運(yùn)算符簡單賦值運(yùn)算符(simple assignment operator)復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符(compound assignment operators)1、簡單賦值運(yùn)算符、簡單賦值運(yùn)算符 簡單

37、賦值運(yùn)算符簡單賦值運(yùn)算符(在不至混淆的情況下在不至混淆的情況下又 稱 賦 值 運(yùn) 算 符又 稱 賦 值 運(yùn) 算 符 ) 是是 = , 賦 值 表 達(dá) 式, 賦 值 表 達(dá) 式(assignment expression)有兩個(gè)功能:有兩個(gè)功能:求賦值表達(dá)式的值求賦值表達(dá)式的值產(chǎn)生副作用產(chǎn)生副作用 賦值表達(dá)式的值是賦值以后左運(yùn)算對(duì)象賦值表達(dá)式的值是賦值以后左運(yùn)算對(duì)象的值的值 賦值表達(dá)式的類型是左運(yùn)算對(duì)象的類型賦值表達(dá)式的類型是左運(yùn)算對(duì)象的類型 副作用是將右運(yùn)算對(duì)象的值轉(zhuǎn)換為賦值副作用是將右運(yùn)算對(duì)象的值轉(zhuǎn)換為賦值表達(dá)式的類型的值,并將轉(zhuǎn)換后的值存儲(chǔ)表達(dá)式的類型的值,并將轉(zhuǎn)換后的值存儲(chǔ)到左運(yùn)算對(duì)象中

38、到左運(yùn)算對(duì)象中 注意:右運(yùn)算對(duì)象的類型并沒有改變注意:右運(yùn)算對(duì)象的類型并沒有改變double d;表達(dá)式表達(dá)式 d = 9【例例2.10】 求賦值表達(dá)式的值求賦值表達(dá)式的值#include int main(void) int a, b; printf(%dn, a = b = 2 + 3); printf(a = %dn, a); printf(b = %dn, b); return 0; 賦值運(yùn)算符的左運(yùn)算對(duì)象必須是可修改賦值運(yùn)算符的左運(yùn)算對(duì)象必須是可修改的左值的左值(modifiable lvalue) 基本類型的變量屬于可修改的左值基本類型的變量屬于可修改的左值 左值左值(lvalue

39、)是一個(gè)表達(dá)式是一個(gè)表達(dá)式(具有除具有除void以外的對(duì)象類型以外的對(duì)象類型)。該表達(dá)式潛在地標(biāo)明一。該表達(dá)式潛在地標(biāo)明一個(gè)對(duì)象,即左值是可以標(biāo)明一塊內(nèi)存的表個(gè)對(duì)象,即左值是可以標(biāo)明一塊內(nèi)存的表達(dá)式達(dá)式 右值右值(rvalue)是表達(dá)式的值是表達(dá)式的值表達(dá)式表達(dá)式 5 = 2 + 3 是錯(cuò)誤的是錯(cuò)誤的 在變量聲明時(shí)給變量賦值,稱為初始化在變量聲明時(shí)給變量賦值,稱為初始化(initialization)int i = 0;double d1 = 3.6, d2 = 7.2;int a = b = c = 100;/ 錯(cuò)誤錯(cuò)誤int a = 100, b = 100, c = 100;/ 正確正確

40、 賦值運(yùn)算符的兩個(gè)運(yùn)算對(duì)象賦值運(yùn)算符的兩個(gè)運(yùn)算對(duì)象的的類型不同類型不同時(shí)發(fā)生的類型轉(zhuǎn)換,可能會(huì)丟失數(shù)據(jù)時(shí)發(fā)生的類型轉(zhuǎn)換,可能會(huì)丟失數(shù)據(jù)int i;表達(dá)式表達(dá)式 i = 3.6char ch;表達(dá)式表達(dá)式 ch = a對(duì)于常用類型對(duì)于常用類型char、int、float和和double,按按下下表進(jìn)行的類型轉(zhuǎn)換通常是可接受的表進(jìn)行的類型轉(zhuǎn)換通常是可接受的左運(yùn)算對(duì)象的類型左運(yùn)算對(duì)象的類型 右運(yùn)算對(duì)象的類型右運(yùn)算對(duì)象的類型doublefloat、int 或或 charfloatint 或或 charintchar 當(dāng)左運(yùn)算對(duì)象的類型為當(dāng)左運(yùn)算對(duì)象的類型為 int,右運(yùn)算對(duì),右運(yùn)算對(duì)象的類型為象的類型

41、為 float 或或 double 時(shí),截?cái)嗳≌麜r(shí),截?cái)嗳≌?include int main(void) int i; printf(%dn, i = 3.6); printf(i = %dn, i); return 0;2、復(fù)合賦值運(yùn)算符、復(fù)合賦值運(yùn)算符 簡復(fù)合賦值運(yùn)算符有簡復(fù)合賦值運(yùn)算符有10個(gè),本節(jié)介紹個(gè),本節(jié)介紹其中的其中的5個(gè),分別是:個(gè),分別是:*=/=%=+=-= 除了左值除了左值E1僅被計(jì)算一次,賦值表達(dá)僅被計(jì)算一次,賦值表達(dá)式式 E1 op= E2 等價(jià)于等價(jià)于E1 = E1 op (E2), 其其中,中,op是是*、/、%、+ 或或 - 中的任何一個(gè)中的任何一個(gè)r *=

42、2 + 3等價(jià)于等價(jià)于r = r * (2 + 3)#include int main(void) int r; r = 3; printf(%dn, r *= 2 + 3); printf(r = %dn, r); return 0; 執(zhí)行序列中某些特定的點(diǎn)被稱為序點(diǎn)執(zhí)行序列中某些特定的點(diǎn)被稱為序點(diǎn)(sequence point) 表達(dá)式表達(dá)式A和表達(dá)式和表達(dá)式B之間有序點(diǎn),意味之間有序點(diǎn),意味著與表達(dá)式著與表達(dá)式A相關(guān)的每一個(gè)值計(jì)算和副作用相關(guān)的每一個(gè)值計(jì)算和副作用完成后,與表達(dá)式完成后,與表達(dá)式B相關(guān)的每一個(gè)值計(jì)算和相關(guān)的每一個(gè)值計(jì)算和副作用才開始副作用才開始 如果與表達(dá)式相關(guān)的副作用有

43、多個(gè),如果與表達(dá)式相關(guān)的副作用有多個(gè),C語言并沒有規(guī)定這多個(gè)副作用發(fā)生的先后語言并沒有規(guī)定這多個(gè)副作用發(fā)生的先后次序,僅規(guī)定這多個(gè)副作用在序點(diǎn)之前完次序,僅規(guī)定這多個(gè)副作用在序點(diǎn)之前完成成int a = 12;a += a -= a * a;/ 不推薦使用不推薦使用九、后綴增九、后綴增1運(yùn)算符與后綴減運(yùn)算符與后綴減1運(yùn)算符運(yùn)算符 后綴增后綴增1運(yùn)算符運(yùn)算符(postfix increment operator)是是 +,屬于單目運(yùn)算符,其運(yùn)算,屬于單目運(yùn)算符,其運(yùn)算對(duì)象必須是可修改的左值對(duì)象必須是可修改的左值表達(dá)式表達(dá)式 5+ 是錯(cuò)誤的是錯(cuò)誤的 由后綴增由后綴增1運(yùn)算符和運(yùn)算對(duì)象構(gòu)成的表運(yùn)算符和運(yùn)算對(duì)象構(gòu)成的表達(dá)式有兩個(gè)功能:達(dá)式有兩個(gè)功能:求表達(dá)式的值求表達(dá)式的值產(chǎn)生副作用產(chǎn)生副作用 求表達(dá)式的值在副作用之前完成求表達(dá)式的值在副作用之前完成 表達(dá)式的值是運(yùn)算對(duì)象的值;表達(dá)式的表達(dá)式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論