第5章補(bǔ)充 單片機(jī)C語(yǔ)言基礎(chǔ)_第1頁(yè)
第5章補(bǔ)充 單片機(jī)C語(yǔ)言基礎(chǔ)_第2頁(yè)
第5章補(bǔ)充 單片機(jī)C語(yǔ)言基礎(chǔ)_第3頁(yè)
第5章補(bǔ)充 單片機(jī)C語(yǔ)言基礎(chǔ)_第4頁(yè)
第5章補(bǔ)充 單片機(jī)C語(yǔ)言基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第四章第四章 單片機(jī)單片機(jī)C程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)4.1 C51程序開發(fā)概述程序開發(fā)概述 4.2 C51數(shù)據(jù)類型數(shù)據(jù)類型 4.3 C51運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式 4.4 C51構(gòu)造數(shù)據(jù)類型簡(jiǎn)介構(gòu)造數(shù)據(jù)類型簡(jiǎn)介 4.5 C51函數(shù)函數(shù)4.6 預(yù)處理命令、庫(kù)函數(shù)預(yù)處理命令、庫(kù)函數(shù) 4.7 匯編語(yǔ)言與匯編語(yǔ)言與C語(yǔ)言混合編程語(yǔ)言混合編程4.8 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 4.9 51單片機(jī)單片機(jī)C程序開發(fā)過(guò)程程序開發(fā)過(guò)程4.1 4.1 C51C51程序開發(fā)概述程序開發(fā)概述 在在C C語(yǔ)言編程中,對(duì)數(shù)據(jù)類型與變量的定義,必須要與語(yǔ)言編程中,對(duì)數(shù)據(jù)類型與變量的定義,必須要與單片機(jī)的存儲(chǔ)結(jié)構(gòu)相關(guān)聯(lián)

2、,否則編譯器不能正確地映射單片機(jī)的存儲(chǔ)結(jié)構(gòu)相關(guān)聯(lián),否則編譯器不能正確地映射定位。定位。 用用C C語(yǔ)言編寫單片機(jī)應(yīng)用程序與編寫標(biāo)準(zhǔn)的語(yǔ)言編寫單片機(jī)應(yīng)用程序與編寫標(biāo)準(zhǔn)的C C語(yǔ)言程序語(yǔ)言程序的不同之處就在于的不同之處就在于根據(jù)單片機(jī)存儲(chǔ)結(jié)構(gòu)及內(nèi)部資源定義根據(jù)單片機(jī)存儲(chǔ)結(jié)構(gòu)及內(nèi)部資源定義相應(yīng)的相應(yīng)的C C語(yǔ)言中的數(shù)據(jù)類型和變量語(yǔ)言中的數(shù)據(jù)類型和變量,其它的語(yǔ)法規(guī)定、,其它的語(yǔ)法規(guī)定、程序結(jié)構(gòu)及程序設(shè)計(jì)方法都與標(biāo)準(zhǔn)的程序結(jié)構(gòu)及程序設(shè)計(jì)方法都與標(biāo)準(zhǔn)的C C語(yǔ)言程序設(shè)計(jì)相語(yǔ)言程序設(shè)計(jì)相同。同。 C51C51編譯器能自動(dòng)完成變量的存儲(chǔ)單元的分配,編程者編譯器能自動(dòng)完成變量的存儲(chǔ)單元的分配,編程者可以對(duì)常用

3、的接口芯片、功能模塊和算法可以對(duì)常用的接口芯片、功能模塊和算法編制通用的驅(qū)編制通用的驅(qū)動(dòng)函數(shù)動(dòng)函數(shù),可以方便地進(jìn)行信號(hào)處理算法和程序的移植,可以方便地進(jìn)行信號(hào)處理算法和程序的移植,從而加快單片機(jī)開發(fā)速度。從而加快單片機(jī)開發(fā)速度。 4.2 4.2 C51C51數(shù)據(jù)類型數(shù)據(jù)類型4.2.1 C51的標(biāo)識(shí)符與關(guān)鍵字的標(biāo)識(shí)符與關(guān)鍵字C51與任何高級(jí)語(yǔ)言一樣,有規(guī)定的符號(hào)、詞匯和語(yǔ)與任何高級(jí)語(yǔ)言一樣,有規(guī)定的符號(hào)、詞匯和語(yǔ)法規(guī)則。法規(guī)則。C51的標(biāo)識(shí)符的意義及用途與標(biāo)準(zhǔn)的標(biāo)識(shí)符的意義及用途與標(biāo)準(zhǔn)C相同。相同。關(guān)鍵字是關(guān)鍵字是C51已定義的具有固定名稱和特定含義的特已定義的具有固定名稱和特定含義的特殊標(biāo)識(shí)符

4、殊標(biāo)識(shí)符,又稱保留字,源程序中用戶自己命名的標(biāo),又稱保留字,源程序中用戶自己命名的標(biāo)識(shí)符不能和關(guān)鍵字相同。識(shí)符不能和關(guān)鍵字相同。4.2 4.2 C51C51數(shù)據(jù)類型數(shù)據(jù)類型4.2.2 數(shù)據(jù)類型數(shù)據(jù)類型C51常用的基本數(shù)據(jù)類型有無(wú)符號(hào)字符型、有符號(hào)字常用的基本數(shù)據(jù)類型有無(wú)符號(hào)字符型、有符號(hào)字符型、無(wú)符號(hào)整型、有符號(hào)整型、無(wú)符號(hào)長(zhǎng)整型、有符型、無(wú)符號(hào)整型、有符號(hào)整型、無(wú)符號(hào)長(zhǎng)整型、有符號(hào)長(zhǎng)整型、浮點(diǎn)型、指針,這些類型和標(biāo)準(zhǔn)符號(hào)長(zhǎng)整型、浮點(diǎn)型、指針,這些類型和標(biāo)準(zhǔn)C相同。相同。需注意在需注意在C51編譯器中編譯器中int和和short相同,相同,float和和double相同相同 ,C51擴(kuò)展的數(shù)據(jù)

5、類型有擴(kuò)展的數(shù)據(jù)類型有bit、sbit、sfr、sfr16 。1char 字符類型字符類型char類型的長(zhǎng)度是一個(gè)字節(jié),通常用于定義處理字符類型的長(zhǎng)度是一個(gè)字節(jié),通常用于定義處理字符數(shù)據(jù)的變量或常量。數(shù)據(jù)的變量或常量。分無(wú)符號(hào)字符類型分無(wú)符號(hào)字符類型unsigned char和有符號(hào)字符類型和有符號(hào)字符類型signed char,默認(rèn)值為,默認(rèn)值為signed char類型。類型。 unsigned char常用于處理常用于處理ASCII字符或字符或255以內(nèi)的整形數(shù)。以內(nèi)的整形數(shù)。2int 整型整型int整型長(zhǎng)度為整型長(zhǎng)度為兩個(gè)字節(jié),兩個(gè)字節(jié),用于存放一個(gè)雙字節(jié)數(shù)據(jù)。用于存放一個(gè)雙字節(jié)數(shù)據(jù)。

6、分有符號(hào)分有符號(hào)int整型數(shù)整型數(shù)signed int和無(wú)符號(hào)整型數(shù)和無(wú)符號(hào)整型數(shù)unsigned int,默認(rèn)值為,默認(rèn)值為signed int類型。類型。 3long 長(zhǎng)整型長(zhǎng)整型long長(zhǎng)整型長(zhǎng)度為四個(gè)字節(jié),用于存放一個(gè)四字節(jié)數(shù)長(zhǎng)整型長(zhǎng)度為四個(gè)字節(jié),用于存放一個(gè)四字節(jié)數(shù)據(jù)。分有符號(hào)據(jù)。分有符號(hào)long長(zhǎng)整型長(zhǎng)整型signed long和無(wú)符號(hào)長(zhǎng)整型和無(wú)符號(hào)長(zhǎng)整型unsigned long,默認(rèn)值為,默認(rèn)值為signed long類型。類型。 4float 浮點(diǎn)型浮點(diǎn)型float浮點(diǎn)型在十進(jìn)制中具有浮點(diǎn)型在十進(jìn)制中具有7位有效數(shù)字,是符合位有效數(shù)字,是符合IEEE754標(biāo)準(zhǔn)的單精度浮點(diǎn)型數(shù)

7、據(jù),占用四個(gè)字節(jié)。標(biāo)準(zhǔn)的單精度浮點(diǎn)型數(shù)據(jù),占用四個(gè)字節(jié)。5指針型指針型指針型本身就是一個(gè)變量,在這個(gè)變量中存放的是另指針型本身就是一個(gè)變量,在這個(gè)變量中存放的是另一個(gè)數(shù)據(jù)的地址。這個(gè)指針變量要占據(jù)一定的內(nèi)存單一個(gè)數(shù)據(jù)的地址。這個(gè)指針變量要占據(jù)一定的內(nèi)存單元,對(duì)不同的處理器長(zhǎng)度也不盡相同元,對(duì)不同的處理器長(zhǎng)度也不盡相同 6bit 位變量位變量bit位變量是位變量是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個(gè)位變量,義一個(gè)位變量,但不能定義位指針,也不能定義位數(shù)組但不能定義位指針,也不能定義位數(shù)組。它的值是一個(gè)二進(jìn)制位,不是它的值是一個(gè)二進(jìn)制位,不是0就是就

8、是1。它的聲明與別的它的聲明與別的C數(shù)據(jù)類型的聲明相似,例如:數(shù)據(jù)類型的聲明相似,例如: static bit done_flag=0; /位變量位變量 bit testfunc(bit flag1, bit flag2 ) . return(0); /位返回值位返回值 所有的所有的bit變量都放在變量都放在51內(nèi)部存儲(chǔ)區(qū)的可位尋址區(qū),而該區(qū)域只內(nèi)部存儲(chǔ)區(qū)的可位尋址區(qū),而該區(qū)域只有有16字節(jié)長(zhǎng),所以在某個(gè)范圍內(nèi)只能聲明最多字節(jié)長(zhǎng),所以在某個(gè)范圍內(nèi)只能聲明最多128個(gè)位變量。個(gè)位變量。位函數(shù)位參數(shù)7sfr 特殊功能寄存器特殊功能寄存器sfr也是一種擴(kuò)充數(shù)據(jù)類型,占用一個(gè)內(nèi)存單元,值域也是一種擴(kuò)充

9、數(shù)據(jù)類型,占用一個(gè)內(nèi)存單元,值域?yàn)闉?255。利用它可以訪問(wèn)。利用它可以訪問(wèn)51單片機(jī)內(nèi)部的所有特殊單片機(jī)內(nèi)部的所有特殊功能寄存器。功能寄存器。8sfr16 16位特殊功能寄存器位特殊功能寄存器sfr16占用兩個(gè)內(nèi)存單元,值域?yàn)檎加脙蓚€(gè)內(nèi)存單元,值域?yàn)?65535。sfr16和和sfr一樣用于操作特殊功能寄存器,所不同的是它用于一樣用于操作特殊功能寄存器,所不同的是它用于操作占兩個(gè)字節(jié)的寄存器,如定時(shí)器操作占兩個(gè)字節(jié)的寄存器,如定時(shí)器T0和和T1。9sbit 可尋址位可尋址位sbit是是C51中的一種擴(kuò)充數(shù)據(jù)類型,利用它可以訪問(wèn)芯中的一種擴(kuò)充數(shù)據(jù)類型,利用它可以訪問(wèn)芯片內(nèi)部的片內(nèi)部的RAM中的

10、可尋址位或特殊功能寄存器中的可中的可尋址位或特殊功能寄存器中的可尋址位。尋址位。 例:例:sfr P1=0X90,可定義,可定義sbit P1_1=P11當(dāng)當(dāng)用用sbit訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)的可位尋址區(qū),訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)的可位尋址區(qū),則,則,必須要有必須要有用用bdata存儲(chǔ)類型聲明的變量并且是全局的,即變量存儲(chǔ)類型聲明的變量并且是全局的,即變量聲明聲明: int bdata ibase;/可位尋址的整型變量可位尋址的整型變量 char bdata array4;/可位尋址的字符型數(shù)組可位尋址的字符型數(shù)組變量變量ibase和和bary是可位尋址的,因此這些變量的每個(gè)位是可位尋址的,因此這些變量

11、的每個(gè)位是可以直接訪問(wèn)和修改的,故可以用是可以直接訪問(wèn)和修改的,故可以用sbit關(guān)鍵字聲明新的關(guān)鍵字聲明新的變量,來(lái)訪問(wèn)它們的各個(gè)位,例如:變量,來(lái)訪問(wèn)它們的各個(gè)位,例如:sbit Ary07=array07;/數(shù)組元素?cái)?shù)組元素array0的第的第7位位上面的例子只是聲明并不分配位空間上面的例子只是聲明并不分配位空間。其中。其中“”符號(hào)后的符號(hào)后的表達(dá)式指定位的位置表達(dá)式指定位的位置,此表達(dá)式必須是常數(shù),其范圍由聲,此表達(dá)式必須是常數(shù),其范圍由聲明的基變量決定明的基變量決定 若要在別的模塊中使用已定義的若要在別的模塊中使用已定義的sbit類型,同樣應(yīng)該對(duì)類型,同樣應(yīng)該對(duì)其提供外部變量聲明,方式

12、如下:其提供外部變量聲明,方式如下: extern bit mybit0幾點(diǎn)注意:幾點(diǎn)注意: 盡量采用無(wú)符號(hào)模式;盡量采用無(wú)符號(hào)模式; 位型變量與單片機(jī)硬件結(jié)構(gòu)有關(guān),且要注意位型變量與單片機(jī)硬件結(jié)構(gòu)有關(guān),且要注意bit和和 Sbit的區(qū)別的區(qū)別 編譯時(shí)存在類型不同的情況下,數(shù)據(jù)類型自動(dòng)向較編譯時(shí)存在類型不同的情況下,數(shù)據(jù)類型自動(dòng)向較高級(jí)數(shù)據(jù)類型靠。高級(jí)數(shù)據(jù)類型靠。4.2.3 4.2.3 數(shù)據(jù)的存儲(chǔ)器數(shù)據(jù)的存儲(chǔ)器類型類型 C51變量定義中的存儲(chǔ)器類型部分指定了該變量的存儲(chǔ)區(qū)域,變量定義中的存儲(chǔ)器類型部分指定了該變量的存儲(chǔ)區(qū)域,存儲(chǔ)器類型可以由關(guān)鍵字直接聲明指定。存儲(chǔ)器類型可以由關(guān)鍵字直接聲明指定

13、。表 C51存儲(chǔ)器類型4.2.4 4.2.4 常量和常量和變量變量.常量常量: 整型、浮點(diǎn)型、字符型、字符串型和位標(biāo)量。整型、浮點(diǎn)型、字符型、字符串型和位標(biāo)量。 常量的數(shù)據(jù)類型說(shuō)明方式如下:常量的數(shù)據(jù)類型說(shuō)明方式如下: 1)整型常量)整型常量:十進(jìn)制十進(jìn)制,123,0,-66等,十六進(jìn)制,以等,十六進(jìn)制,以0 x開頭,例:開頭,例:0 x12,0 xf4等,長(zhǎng)整型在數(shù)字后面加字母等,長(zhǎng)整型在數(shù)字后面加字母L:100L、36L。 2)浮點(diǎn)型常量可分為十進(jìn)制和指數(shù)表示形式。)浮點(diǎn)型常量可分為十進(jìn)制和指數(shù)表示形式。 0.456,0.10 123E4,82.4E-3 3)字符型常量由雙引號(hào)內(nèi)的字符組成

14、)字符型常量由雙引號(hào)內(nèi)的字符組成 “abc”、 “123”2. 變量變量變量是可以在程序運(yùn)行過(guò)程中不斷變化的量,變量的定義變量是可以在程序運(yùn)行過(guò)程中不斷變化的量,變量的定義可以使用所有可以使用所有C51編譯器支持的數(shù)據(jù)類型。格式如下:編譯器支持的數(shù)據(jù)類型。格式如下: 存儲(chǔ)種類存儲(chǔ)種類 數(shù)據(jù)類型數(shù)據(jù)類型存儲(chǔ)器類型存儲(chǔ)器類型 變量名表變量名表在定義格式中除了在定義格式中除了數(shù)據(jù)類型和變量名表是必要的,其它都數(shù)據(jù)類型和變量名表是必要的,其它都是可選項(xiàng)。是可選項(xiàng)。存儲(chǔ)種類有四種:自動(dòng)(存儲(chǔ)種類有四種:自動(dòng)(auto),外部(外部(extern),靜態(tài)靜態(tài)(static)和寄存器()和寄存器(regis

15、ter),缺省類型為自動(dòng)),缺省類型為自動(dòng)(auto)。4.2.5 514.2.5 51單片機(jī)硬件結(jié)構(gòu)的單片機(jī)硬件結(jié)構(gòu)的C51C51定義定義1對(duì)特殊功能寄存器對(duì)特殊功能寄存器SFR的定義的定義51系列單片機(jī)內(nèi)部系列單片機(jī)內(nèi)部RAM的的80HFFH區(qū)域有區(qū)域有21個(gè)特殊功個(gè)特殊功能寄存器,為了對(duì)它們能夠進(jìn)行直接訪問(wèn),能寄存器,為了對(duì)它們能夠進(jìn)行直接訪問(wèn),C51編譯器利編譯器利用擴(kuò)展的關(guān)鍵字用擴(kuò)展的關(guān)鍵字sfr和和sfr16對(duì)這些特殊功能寄存器進(jìn)行定對(duì)這些特殊功能寄存器進(jìn)行定義。義。8位特殊功能寄存器變量用關(guān)鍵字位特殊功能寄存器變量用關(guān)鍵字sfr說(shuō)明,定義格式為:說(shuō)明,定義格式為:sfrSFR名名

16、=絕對(duì)地址;絕對(duì)地址; sfr SCON=0 x98;/串口串口 通信控制寄存器通信控制寄存器 sfr SCON=0 x88;/定時(shí)器定時(shí)器/計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器 sfr P1=0 x90;/P1端口地址端口地址4.2.5 514.2.5 51單片機(jī)硬件結(jié)構(gòu)的單片機(jī)硬件結(jié)構(gòu)的C51C51定義定義 新型新型51系列單片機(jī)中,兩個(gè)系列單片機(jī)中,兩個(gè)8位特殊功能寄存器位特殊功能寄存器經(jīng)常組合為經(jīng)常組合為16位寄存器使用,當(dāng)位寄存器使用,當(dāng)16位寄存器的高位寄存器的高端地址直接位于低端地址之后,就可以定義一個(gè)端地址直接位于低端地址之后,就可以定義一個(gè)16位特殊功能寄存器變量,定義格式為:位

17、特殊功能寄存器變量,定義格式為:sfr16 SFR名名=sfr16 低端地址低端地址; sfr16 TL2=0 xcc;2特殊功能寄存器中特定位的定義特殊功能寄存器中特定位的定義在在C51中可以利用關(guān)鍵字中可以利用關(guān)鍵字sbit定義可獨(dú)立尋址訪問(wèn)的位變定義可獨(dú)立尋址訪問(wèn)的位變量,如定義量,如定義80C51單片機(jī)單片機(jī)SFR中的一些特定位。定義方法中的一些特定位。定義方法有多種,分別為有多種,分別為 : ) 用字節(jié)地址位表示例如:用字節(jié)地址位表示例如:sbit CY=0 xd07 2)用寄存器名)用寄存器名.位定義位定義 sfr PSW=0 xd0;sbit CY=PSW7; 3)用直接位地址表

18、示)用直接位地址表示例如:例如:sbit OV=0 xd2; sbit CY=0 xd7;4)使用頭文件)使用頭文件reg51.h,再直接用位名稱,再直接用位名稱例如:例如:#include TR0=1; EA=1;TF0=0; 5)使用頭文件及)使用頭文件及sbit定義符,常用于無(wú)位名稱的可位尋址位定義符,常用于無(wú)位名稱的可位尋址位 例如:例如:#include sbit p10=P10; sbit a7=ACC7;3對(duì)一般位變量的定義對(duì)一般位變量的定義當(dāng)位變量位于內(nèi)部當(dāng)位變量位于內(nèi)部RAM的可位尋址區(qū)(的可位尋址區(qū)(20H2FH單元)單元)時(shí),可以利用時(shí),可以利用C51編譯器提供的編譯器提

19、供的bdata存儲(chǔ)器類型進(jìn)行訪存儲(chǔ)器類型進(jìn)行訪問(wèn),問(wèn),帶有帶有bdata類型的變量可以進(jìn)行字節(jié)或位尋址類型的變量可以進(jìn)行字節(jié)或位尋址,用,用sbit指定指定bdata變量的相應(yīng)位后就可以進(jìn)行位尋址。例如:變量的相應(yīng)位后就可以進(jìn)行位尋址。例如:char bdata temp; sbit bit7=temp7; bit7=1;另外,也可以用關(guān)鍵字另外,也可以用關(guān)鍵字bit定義普通位變量,此時(shí)定義普通位變量,此時(shí)C51編譯編譯器會(huì)自行將該位變量定位于可位尋址的器會(huì)自行將該位變量定位于可位尋址的bdata區(qū)。區(qū)。 bit flag;注意注意:不能定義:不能定義bit類型指針,也不能定義類型指針,也不能

20、定義bit類型數(shù)組。類型數(shù)組。 4C51對(duì)存儲(chǔ)器和外接對(duì)存儲(chǔ)器和外接I/O接口的絕對(duì)地址訪問(wèn)接口的絕對(duì)地址訪問(wèn)用用關(guān)鍵字關(guān)鍵字sfr、sfr16、sbit說(shuō)明變量就是指定變量的絕對(duì)地說(shuō)明變量就是指定變量的絕對(duì)地址,對(duì)這些變量的訪問(wèn)就是絕對(duì)地址訪問(wèn)。址,對(duì)這些變量的訪問(wèn)就是絕對(duì)地址訪問(wèn)。C51程序?qū)^對(duì)地址單元的訪問(wèn)還可以使用宏定義實(shí)現(xiàn):程序?qū)^對(duì)地址單元的訪問(wèn)還可以使用宏定義實(shí)現(xiàn):用用C51提供的宏定義絕對(duì)地址訪問(wèn)頭文件提供的宏定義絕對(duì)地址訪問(wèn)頭文件absacc.h定義絕定義絕對(duì)地址變量,可對(duì)不同的存儲(chǔ)區(qū)進(jìn)行訪問(wèn)。對(duì)地址變量,可對(duì)不同的存儲(chǔ)區(qū)進(jìn)行訪問(wèn)。 #include #define cmd

21、 XBYTE0 x7fff /定義命令寄存器地址定義命令寄存器地址 #define PA8255 XBYTE0 x7ffc /定義定義8255A口絕對(duì)地址口絕對(duì)地址也可以不使用宏定義的方法,直接使用也可以不使用宏定義的方法,直接使用,如:,如:var=XBYTE0 x8000;XBYTE0 x8000=0 x21;4.3 4.3 C51C51運(yùn)算符和運(yùn)算符和表達(dá)式表達(dá)式 C語(yǔ)言的運(yùn)算符有以下幾類:語(yǔ)言的運(yùn)算符有以下幾類:算術(shù)運(yùn)算符算術(shù)運(yùn)算符、邏輯運(yùn)算符邏輯運(yùn)算符、位位操作運(yùn)算符操作運(yùn)算符、賦值運(yùn)算符賦值運(yùn)算符、條件運(yùn)算符條件運(yùn)算符、逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符、關(guān)系關(guān)系運(yùn)算符等運(yùn)算符等。運(yùn)算符的類型可

22、以分為:。運(yùn)算符的類型可以分為:?jiǎn)文?、雙目和多目單目、雙目和多目。單。單目運(yùn)算符只有一個(gè)操作數(shù);雙目運(yùn)算符有兩個(gè)操作數(shù);而多目運(yùn)算符只有一個(gè)操作數(shù);雙目運(yùn)算符有兩個(gè)操作數(shù);而多目運(yùn)算符則有多個(gè)操作數(shù)。目運(yùn)算符則有多個(gè)操作數(shù)。 用運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(操作數(shù))連接起來(lái)并符合用運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(操作數(shù))連接起來(lái)并符合C語(yǔ)語(yǔ)言規(guī)則的式子稱為表達(dá)式,言規(guī)則的式子稱為表達(dá)式,C語(yǔ)言有語(yǔ)言有算術(shù)表達(dá)式、賦值表達(dá)算術(shù)表達(dá)式、賦值表達(dá)式、逗號(hào)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式式、逗號(hào)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式等。等。 任意一個(gè)表達(dá)式的后面加一個(gè)任意一個(gè)表達(dá)式的后面加一個(gè)“;”就構(gòu)成了一個(gè)表達(dá)式語(yǔ)就構(gòu)成

23、了一個(gè)表達(dá)式語(yǔ)句。由運(yùn)算符和表達(dá)式可以構(gòu)成句。由運(yùn)算符和表達(dá)式可以構(gòu)成C51程序的各種語(yǔ)句。程序的各種語(yǔ)句。 4.3.1 4.3.1 賦值賦值運(yùn)算符運(yùn)算符 賦值運(yùn)算符及其說(shuō)明如表賦值運(yùn)算符及其說(shuō)明如表4-1所示所示 表表4-1賦值運(yùn)算符賦值運(yùn)算符 例例4-1 指針的使用方法。指針的使用方法。程序代碼如下:程序代碼如下:main()idata var1,var2,*p,var3;var1=4;var2=7;var3=5;while(1);4.3.2 4.3.2 算術(shù)運(yùn)算符和算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)表達(dá)式 算術(shù)運(yùn)算符及其說(shuō)明如表算術(shù)運(yùn)算符及其說(shuō)明如表4-2所示所示 兩個(gè)整數(shù)相除,結(jié)果仍為整數(shù)(商

24、),舍去小數(shù)部分(余兩個(gè)整數(shù)相除,結(jié)果仍為整數(shù)(商),舍去小數(shù)部分(余數(shù))。取余運(yùn)算中,參與運(yùn)算的兩個(gè)量數(shù))。取余運(yùn)算中,參與運(yùn)算的兩個(gè)量必須是整型數(shù)必須是整型數(shù),結(jié),結(jié)果為兩個(gè)數(shù)相除之后的余數(shù)。果為兩個(gè)數(shù)相除之后的余數(shù)。余余例:# include Main()idata a,b,c,d;a=7;b=4;c=a/b;d=a%b;while(1);4.3.3 4.3.3 關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式 關(guān)系表達(dá)式的值為邏輯值:真和假。在關(guān)系表達(dá)式的值為邏輯值:真和假。在C51中用中用0表示表示假,用假,用1表示真表示真 關(guān)系運(yùn)算符優(yōu)先級(jí)低于算術(shù)運(yùn)算,高于賦值運(yùn)算關(guān)系運(yùn)算符優(yōu)先級(jí)低于

25、算術(shù)運(yùn)算,高于賦值運(yùn)算符號(hào)運(yùn)算符類型運(yùn)算符功能符號(hào)運(yùn)算符類型運(yùn)算符功能雙目大于=雙目小于等于=雙目大于等于! =雙目不等于4.3.4 4.3.4 邏輯運(yùn)算符和邏輯運(yùn)算符和邏輯表達(dá)式邏輯表達(dá)式 邏輯運(yùn)算符及其說(shuō)明如表邏輯運(yùn)算符及其說(shuō)明如表4-3所示所示 在邏輯運(yùn)算中,最基本的是二值邏輯即真和假,而邏輯運(yùn)在邏輯運(yùn)算中,最基本的是二值邏輯即真和假,而邏輯運(yùn)算就是以真假邏輯為對(duì)象的運(yùn)算。在以上算就是以真假邏輯為對(duì)象的運(yùn)算。在以上3種邏輯運(yùn)算中,種邏輯運(yùn)算中,邏輯非的優(yōu)先級(jí)最高,且高于算術(shù)運(yùn)算符;邏輯或的優(yōu)先邏輯非的優(yōu)先級(jí)最高,且高于算術(shù)運(yùn)算符;邏輯或的優(yōu)先級(jí)最低,低于關(guān)系運(yùn)算符,但高于賦值運(yùn)算符。級(jí)最

26、低,低于關(guān)系運(yùn)算符,但高于賦值運(yùn)算符。 邏輯表達(dá)式的值與關(guān)系表達(dá)式的值相同,均為邏輯值。用邏輯表達(dá)式的值與關(guān)系表達(dá)式的值相同,均為邏輯值。用0表示假,用表示假,用1表示真。表示真。4.3.5 4.3.5 位運(yùn)算符和位位運(yùn)算符和位運(yùn)算運(yùn)算 C51提供提供6種位運(yùn)算符,如表種位運(yùn)算符,如表4-4所示所示 移位運(yùn)算法則如下移位運(yùn)算法則如下:對(duì)于有符號(hào)數(shù),要對(duì)符號(hào)進(jìn)行擴(kuò)展,最對(duì)于有符號(hào)數(shù),要對(duì)符號(hào)進(jìn)行擴(kuò)展,最高位為符號(hào)位,正數(shù)的最高位保持為高位為符號(hào)位,正數(shù)的最高位保持為0,而負(fù)數(shù)的最高位保,而負(fù)數(shù)的最高位保持為持為1(除非移位后數(shù)據(jù)溢出)。對(duì)于無(wú)符號(hào)數(shù)移位操作,(除非移位后數(shù)據(jù)溢出)。對(duì)于無(wú)符號(hào)數(shù)移

27、位操作,空缺位直接補(bǔ)空缺位直接補(bǔ)0即可。即可。 位運(yùn)算的優(yōu)先級(jí)順序?yàn)椋何蝗》础⒆笠坪陀乙?、位與、位位運(yùn)算的優(yōu)先級(jí)順序?yàn)椋何蝗》础⒆笠坪陀乙啤⑽慌c、位異或、位或。異或、位或。 4.3.6 4.3.6 復(fù)合運(yùn)算符及其復(fù)合運(yùn)算符及其表達(dá)式表達(dá)式 復(fù)合運(yùn)算的運(yùn)算符及說(shuō)明如表復(fù)合運(yùn)算的運(yùn)算符及說(shuō)明如表4-5所示。所示。 C語(yǔ)言中的復(fù)合運(yùn)算符,使得語(yǔ)句的書寫更加簡(jiǎn)潔,符號(hào)左語(yǔ)言中的復(fù)合運(yùn)算符,使得語(yǔ)句的書寫更加簡(jiǎn)潔,符號(hào)左邊的變量既是源操作數(shù)也為目的操作數(shù)。邊的變量既是源操作數(shù)也為目的操作數(shù)。Main()()char idata var1=1, var2=2, var3=3, var4=4, var5=5

28、, var6=6, var7=7, var8=8; var1*=2; var2*=var1; var3=1; var44?var1:var2; while(1);4.3 C514.3 C51控制語(yǔ)句和結(jié)構(gòu)化程序設(shè)計(jì)控制語(yǔ)句和結(jié)構(gòu)化程序設(shè)計(jì)4.3.1 4.3.1 C51C51語(yǔ)句和程序結(jié)構(gòu)語(yǔ)句和程序結(jié)構(gòu) C51語(yǔ)句是計(jì)算機(jī)執(zhí)行的操作指令,一條語(yǔ)句以語(yǔ)句是計(jì)算機(jī)執(zhí)行的操作指令,一條語(yǔ)句以分號(hào)結(jié)尾(注意程序中的變量、函數(shù)聲明部分不分號(hào)結(jié)尾(注意程序中的變量、函數(shù)聲明部分不稱為語(yǔ)句,但也以分號(hào)結(jié)尾)。稱為語(yǔ)句,但也以分號(hào)結(jié)尾)。C語(yǔ)句有語(yǔ)句有表達(dá)式表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句、控制語(yǔ)句、空語(yǔ)句和函數(shù)調(diào)用語(yǔ)句、

29、復(fù)合語(yǔ)句、控制語(yǔ)句、空語(yǔ)句和函數(shù)調(diào)用語(yǔ)句語(yǔ)句等。等。C語(yǔ)言是一種結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,從語(yǔ)言是一種結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,從結(jié)構(gòu)上可以把程序分為順序、選擇和循環(huán)結(jié)構(gòu)。結(jié)構(gòu)上可以把程序分為順序、選擇和循環(huán)結(jié)構(gòu)。4.3.2 4.3.2 表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句和順序表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句和順序結(jié)構(gòu)結(jié)構(gòu)表達(dá)式語(yǔ)句的一般形式為:表達(dá)式;表達(dá)式語(yǔ)句的一般形式為:表達(dá)式;例如:例如: x=y+z;/*賦值語(yǔ)句賦值語(yǔ)句*/i+;/*自加自加1語(yǔ)句語(yǔ)句*/ 順序結(jié)構(gòu)程序由按順序執(zhí)行的多個(gè)語(yǔ)句組成,在順序結(jié)構(gòu)程序由按順序執(zhí)行的多個(gè)語(yǔ)句組成,在C語(yǔ)言語(yǔ)言中,常常將按順序執(zhí)行的語(yǔ)句用花括號(hào)中,常常將按順序執(zhí)行的語(yǔ)句用花括號(hào) 括

30、起來(lái)構(gòu)成復(fù)合括起來(lái)構(gòu)成復(fù)合語(yǔ)句,復(fù)合語(yǔ)句中每個(gè)語(yǔ)句以分號(hào)結(jié)尾,語(yǔ)句,復(fù)合語(yǔ)句中每個(gè)語(yǔ)句以分號(hào)結(jié)尾,花括號(hào)后不加分花括號(hào)后不加分號(hào)號(hào)。通常用復(fù)合語(yǔ)句描述順序結(jié)構(gòu)程序。如交換兩個(gè)變量。通常用復(fù)合語(yǔ)句描述順序結(jié)構(gòu)程序。如交換兩個(gè)變量值的復(fù)合語(yǔ)句為:值的復(fù)合語(yǔ)句為: int x,y,temp;/*定義變量定義變量*/ temp=x;/*3個(gè)順序執(zhí)行的賦值語(yǔ)句個(gè)順序執(zhí)行的賦值語(yǔ)句*/ x=y; y=temp;4.3.34.3.3選擇語(yǔ)句和選擇結(jié)構(gòu)程序選擇語(yǔ)句和選擇結(jié)構(gòu)程序if語(yǔ)句用來(lái)判定所給的條件是否滿足來(lái)決定執(zhí)行哪種操作。語(yǔ)句用來(lái)判定所給的條件是否滿足來(lái)決定執(zhí)行哪種操作。If語(yǔ)句有語(yǔ)句有3中形式。中形

31、式。1if語(yǔ)句語(yǔ)句1)if(表達(dá)式)語(yǔ)句;(表達(dá)式)語(yǔ)句;表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式。當(dāng)表達(dá)式的值為表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式。當(dāng)表達(dá)式的值為非非0時(shí)執(zhí)行語(yǔ)句,否則不執(zhí)行語(yǔ)句。語(yǔ)句可以是簡(jiǎn)單語(yǔ)句或時(shí)執(zhí)行語(yǔ)句,否則不執(zhí)行語(yǔ)句。語(yǔ)句可以是簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句。復(fù)合語(yǔ)句。2)if(表達(dá)式表達(dá)式)語(yǔ)句語(yǔ)句1;else 語(yǔ)句語(yǔ)句2;當(dāng)表達(dá)式的值為非零時(shí)執(zhí)行語(yǔ)句當(dāng)表達(dá)式的值為非零時(shí)執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句,否則執(zhí)行語(yǔ)句2。其中。其中的語(yǔ)句的語(yǔ)句1和語(yǔ)句和語(yǔ)句2可以是簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句??梢允呛?jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句。3)if(表達(dá)式(表達(dá)式1)語(yǔ)句)語(yǔ)句1;else if(表達(dá)式(表達(dá)式2)語(yǔ)句)

32、語(yǔ)句2;else if(表達(dá)式(表達(dá)式n)語(yǔ)句)語(yǔ)句n; else語(yǔ)句語(yǔ)句n+1;這種形式的這種形式的if語(yǔ)句可以實(shí)現(xiàn)多種條件的選擇。語(yǔ)句可以實(shí)現(xiàn)多種條件的選擇。在后兩種在后兩種if語(yǔ)句中,應(yīng)注意語(yǔ)句中,應(yīng)注意if和和else的配對(duì),的配對(duì),else總是和最近的總是和最近的if配對(duì),在配對(duì),在if語(yǔ)句中可以再包含語(yǔ)句中可以再包含if語(yǔ)句,構(gòu)成語(yǔ)句,構(gòu)成if語(yǔ)句的嵌套。語(yǔ)句的嵌套。 2條件表達(dá)式條件表達(dá)式在在if(表達(dá)式)語(yǔ)句(表達(dá)式)語(yǔ)句1;else語(yǔ)句語(yǔ)句2;這種形式中,若語(yǔ)句;這種形式中,若語(yǔ)句1、語(yǔ)句語(yǔ)句2都是給同一個(gè)變量賦值,則可以用條件表達(dá)式來(lái)實(shí)都是給同一個(gè)變量賦值,則可以用條件表達(dá)

33、式來(lái)實(shí)現(xiàn)。條件表達(dá)式的一般形式為:現(xiàn)。條件表達(dá)式的一般形式為:表達(dá)式表達(dá)式1 ? 表達(dá)式表達(dá)式2 :表達(dá)式:表達(dá)式3;條件表達(dá)式求解時(shí),先求表達(dá)式條件表達(dá)式求解時(shí),先求表達(dá)式1的值,若非零求解表達(dá)的值,若非零求解表達(dá)式式2的值,并作為條件表達(dá)式的值,若表達(dá)式的值,并作為條件表達(dá)式的值,若表達(dá)式1的值為的值為0,則求解表達(dá)式則求解表達(dá)式3的值,并作為條件表達(dá)式的值。的值,并作為條件表達(dá)式的值。 3switch語(yǔ)句語(yǔ)句switch語(yǔ)句是直接處理多分支的選擇語(yǔ)句,其功能類似于語(yǔ)句是直接處理多分支的選擇語(yǔ)句,其功能類似于51的散轉(zhuǎn)指令的散轉(zhuǎn)指令JMP A+DPTR。一般形式為:。一般形式為:switc

34、h(表達(dá)式表達(dá)式)case 常量表達(dá)式常量表達(dá)式1:語(yǔ)句語(yǔ)句1; case 常量表達(dá)式常量表達(dá)式2:語(yǔ)句語(yǔ)句2; case 常量表達(dá)式常量表達(dá)式n:語(yǔ)句語(yǔ)句n; default:語(yǔ)句語(yǔ)句n+1;switch語(yǔ)句中的表達(dá)式一般為整型或字符型表達(dá)式,當(dāng)表語(yǔ)句中的表達(dá)式一般為整型或字符型表達(dá)式,當(dāng)表達(dá)式的值和某一個(gè)達(dá)式的值和某一個(gè)case后的常量表達(dá)式后的常量表達(dá)式i相同時(shí),就執(zhí)行語(yǔ)相同時(shí),就執(zhí)行語(yǔ)句句i;語(yǔ)句;語(yǔ)句i+1,語(yǔ)句語(yǔ)句n+1,要使各種情況相互排斥,只,要使各種情況相互排斥,只執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句i,應(yīng)在每個(gè)語(yǔ)句后加上退出循環(huán)的語(yǔ)句,應(yīng)在每個(gè)語(yǔ)句后加上退出循環(huán)的語(yǔ)句break;4.3.44.

35、3.4循環(huán)語(yǔ)句和循環(huán)結(jié)構(gòu)循環(huán)語(yǔ)句和循環(huán)結(jié)構(gòu)程序程序 循環(huán)語(yǔ)句有三種:循環(huán)語(yǔ)句有三種:for、while和和do while循環(huán)語(yǔ)句。其執(zhí)循環(huán)語(yǔ)句。其執(zhí)行過(guò)程如下圖所示行過(guò)程如下圖所示 1while語(yǔ)句語(yǔ)句while語(yǔ)句的一般形式為:語(yǔ)句的一般形式為:while(表達(dá)式)語(yǔ)句;(表達(dá)式)語(yǔ)句;2do-while語(yǔ)句語(yǔ)句do-while語(yǔ)句的一般形式:語(yǔ)句的一般形式:do語(yǔ)句;語(yǔ)句;/*循環(huán)體循環(huán)體,可以是簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句可以是簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句*/while(表達(dá)式);(表達(dá)式);/*注意此分號(hào)不可少,表達(dá)式為關(guān)注意此分號(hào)不可少,表達(dá)式為關(guān)系表達(dá)式或邏輯表達(dá)式系表達(dá)式或邏輯表達(dá)式*/do-wh

36、ile語(yǔ)句執(zhí)行循環(huán)體語(yǔ)句,再求解表達(dá)式值,判斷是語(yǔ)句執(zhí)行循環(huán)體語(yǔ)句,再求解表達(dá)式值,判斷是否退出循環(huán)。否退出循環(huán)。3for語(yǔ)句語(yǔ)句for語(yǔ)句的一般形式為:語(yǔ)句的一般形式為:for(表達(dá)式(表達(dá)式1;表達(dá)式;表達(dá)式2;表達(dá)式;表達(dá)式3)語(yǔ)句;)語(yǔ)句;循環(huán)程序由循環(huán)變量初始化、循環(huán)體、修改循環(huán)變量、判循環(huán)程序由循環(huán)變量初始化、循環(huán)體、修改循環(huán)變量、判斷循環(huán)終止條件等部分組成。只不過(guò)斷循環(huán)終止條件等部分組成。只不過(guò)while、do-whlie語(yǔ)句語(yǔ)句循環(huán)變量初始化放在語(yǔ)句的前面,循環(huán)變量的修改放在循循環(huán)變量初始化放在語(yǔ)句的前面,循環(huán)變量的修改放在循環(huán)體中。而環(huán)體中。而for語(yǔ)句語(yǔ)句具有循環(huán)程序所有部

37、分具有循環(huán)程序所有部分:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)控制變量修改)(循環(huán)變量賦初值;循環(huán)條件;循環(huán)控制變量修改) /*循環(huán)體,可以是簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句或空語(yǔ)句循環(huán)體,可以是簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句或空語(yǔ)句*/4goto語(yǔ)句、語(yǔ)句、break語(yǔ)句和語(yǔ)句和continue語(yǔ)句語(yǔ)句1)goto語(yǔ)句為無(wú)條件跳轉(zhuǎn)語(yǔ)句,一般形式為:語(yǔ)句為無(wú)條件跳轉(zhuǎn)語(yǔ)句,一般形式為:goto 語(yǔ)句標(biāo)號(hào);語(yǔ)句標(biāo)號(hào);/*goto語(yǔ)句盡量少用,它會(huì)使得程序流程無(wú)規(guī)律,可讀性差語(yǔ)句盡量少用,它會(huì)使得程序流程無(wú)規(guī)律,可讀性差*/2)break語(yǔ)句用于循環(huán)體中,功能是跳出循環(huán)體,終止整語(yǔ)句用于循環(huán)體中,功能是跳出循環(huán)體,終止整個(gè)循

38、環(huán)。一般形式為:個(gè)循環(huán)。一般形式為:break;3)continue語(yǔ)句也用于循環(huán)體中,功能為跳過(guò)本次循環(huán)中語(yǔ)句也用于循環(huán)體中,功能為跳過(guò)本次循環(huán)中尚未執(zhí)行的語(yǔ)句;繼續(xù)下一次循環(huán),而不是終止整個(gè)循環(huán),尚未執(zhí)行的語(yǔ)句;繼續(xù)下一次循環(huán),而不是終止整個(gè)循環(huán),一般形式為:一般形式為:continue;4.44.4 C51 C51構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型簡(jiǎn)介簡(jiǎn)介4.4.1 數(shù)組數(shù)組數(shù)組是一種構(gòu)造類型的數(shù)據(jù),通常用來(lái)處理具有數(shù)組是一種構(gòu)造類型的數(shù)據(jù),通常用來(lái)處理具有相同屬性的一批數(shù)據(jù)。數(shù)組中個(gè)元素的數(shù)據(jù)類型相同屬性的一批數(shù)據(jù)。數(shù)組中個(gè)元素的數(shù)據(jù)類型必須相同,元素的個(gè)數(shù)必須固定,數(shù)組中的元素必須相同,元素的

39、個(gè)數(shù)必須固定,數(shù)組中的元素按順序存放,每個(gè)元素對(duì)應(yīng)于一個(gè)序號(hào)(稱下按順序存放,每個(gè)元素對(duì)應(yīng)于一個(gè)序號(hào)(稱下標(biāo)),各元素按下標(biāo)存取。數(shù)組元素下標(biāo)的個(gè)數(shù)標(biāo)),各元素按下標(biāo)存取。數(shù)組元素下標(biāo)的個(gè)數(shù)由數(shù)組的維數(shù)決定,一維數(shù)組有一個(gè)下標(biāo),二維由數(shù)組的維數(shù)決定,一維數(shù)組有一個(gè)下標(biāo),二維數(shù)組有兩個(gè)下標(biāo)。數(shù)組有兩個(gè)下標(biāo)。1一維數(shù)組的定義一維數(shù)組的定義C51數(shù)組定義與標(biāo)準(zhǔn)數(shù)組定義與標(biāo)準(zhǔn)C相比,增加了存儲(chǔ)器類型選項(xiàng),相比,增加了存儲(chǔ)器類型選項(xiàng),定義的格式如下:定義的格式如下:數(shù)據(jù)類型數(shù)據(jù)類型 存儲(chǔ)器類型存儲(chǔ)器類型 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式;數(shù)據(jù)類型指定數(shù)據(jù)中元素的基類型,數(shù)據(jù)類型指定數(shù)據(jù)中元素的基類型,

40、存儲(chǔ)器類型存儲(chǔ)器類型選選項(xiàng)指定存放數(shù)組的存儲(chǔ)器類型,數(shù)組名是一個(gè)標(biāo)識(shí)符,項(xiàng)指定存放數(shù)組的存儲(chǔ)器類型,數(shù)組名是一個(gè)標(biāo)識(shí)符,其后的其后的 是數(shù)組的標(biāo)志,方括號(hào)中的常量表達(dá)式指是數(shù)組的標(biāo)志,方括號(hào)中的常量表達(dá)式指定數(shù)組元素的個(gè)數(shù),不能包含變量,即定數(shù)組元素的個(gè)數(shù),不能包含變量,即。例如:在外部例如:在外部RAM中定義一個(gè)存放鍵盤中的中定義一個(gè)存放鍵盤中的10個(gè)鍵個(gè)鍵號(hào)的數(shù)組:號(hào)的數(shù)組:unsigned char xdata key10;2一維數(shù)組的引用一維數(shù)組的引用數(shù)組必須先定義,再引用數(shù)組必須先定義,再引用。而且只能逐個(gè)引用數(shù)組中的元素,。而且只能逐個(gè)引用數(shù)組中的元素,不能一次引用整個(gè)數(shù)組。不能一

41、次引用整個(gè)數(shù)組。例例4-15 假設(shè)已定義的一個(gè)數(shù)組假設(shè)已定義的一個(gè)數(shù)組student_score50中存放了某中存放了某班所有學(xué)生的單科成績(jī),班所有學(xué)生的單科成績(jī),student_scorei代表相應(yīng)序號(hào)的學(xué)代表相應(yīng)序號(hào)的學(xué)生的成績(jī),可以分別存取。編寫程序統(tǒng)計(jì)生的成績(jī),可以分別存取。編寫程序統(tǒng)計(jì)80分以上,分以上,6080分,分,60分以下的人數(shù)。分以下的人數(shù)。unsigned char i=0,score_a=0,score_b=0,score_f=0;for(;(;i80) score_a+;/*80分以上分以上*/ else if(studentvv_scorei=60) score_b

42、+;/*6080分分*/ else score_f+;/*60分以下分以下*/ 3一維數(shù)組的初始化一維數(shù)組的初始化在定義數(shù)組時(shí)如果給所有元素賦值,可以不指定在定義數(shù)組時(shí)如果給所有元素賦值,可以不指定數(shù)組元素的個(gè)數(shù),如數(shù)組元素的個(gè)數(shù),如char b=0,1,2,3,4,注意注意數(shù)組標(biāo)志括號(hào)不可省數(shù)組標(biāo)志括號(hào)不可省。在定義數(shù)組時(shí)可只給部分元素賦初值在定義數(shù)組時(shí)可只給部分元素賦初值 ,例如,例如unsigned char a10=9,8,7,6;初始化數(shù)組時(shí)全部元素初值為初始化數(shù)組時(shí)全部元素初值為0時(shí),例如:時(shí),例如:char b5=0,0,0,0,0或或char b5=0; 4.4.2 指針指針在

43、匯編語(yǔ)言程序中,要取某個(gè)存儲(chǔ)單元的內(nèi)容,可用直接在匯編語(yǔ)言程序中,要取某個(gè)存儲(chǔ)單元的內(nèi)容,可用直接尋址方式,也可用寄存器間接尋址方式。若用尋址方式,也可用寄存器間接尋址方式。若用R1寄存器寄存器指示該存儲(chǔ)單元的地址,則用指示該存儲(chǔ)單元的地址,則用R1取該單元的內(nèi)容。對(duì)取該單元的內(nèi)容。對(duì)應(yīng)地,在應(yīng)地,在C語(yǔ)言中語(yǔ)言中,用變量名表示要取變量的值(相當(dāng)于直用變量名表示要取變量的值(相當(dāng)于直接尋址),也可用另一個(gè)變量接尋址),也可用另一個(gè)變量p存放該存儲(chǔ)單元地址,存放該存儲(chǔ)單元地址,p即相當(dāng)于即相當(dāng)于R1寄存器。寄存器。用用*p取得存儲(chǔ)單元的內(nèi)容取得存儲(chǔ)單元的內(nèi)容(相當(dāng)于(相當(dāng)于匯編中的間接尋址方式)

44、,此處匯編中的間接尋址方式),此處p即為指針型變量。即為指針型變量。C51編譯器支持兩種類型的指針:編譯器支持兩種類型的指針:通用指針通用指針和和指定存儲(chǔ)區(qū)指定存儲(chǔ)區(qū)指針指針。下面將具體介紹這些指針類型。下面將具體介紹這些指針類型。1通用指針通用指針通用指針的聲明和使用均與標(biāo)準(zhǔn)通用指針的聲明和使用均與標(biāo)準(zhǔn)C指針相同,只不過(guò)同時(shí)指針相同,只不過(guò)同時(shí)還可以說(shuō)明指針的存儲(chǔ)類型。例如:還可以說(shuō)明指針的存儲(chǔ)類型。例如:char *str;int *ptr;long *lptr;上述例子中分別聲明了指向上述例子中分別聲明了指向char型、型、int型和型和long型數(shù)據(jù)的指型數(shù)據(jù)的指針,而各指針針,而各指

45、針str、ptr、lptr本身則缺省依照存儲(chǔ)模式存放。本身則缺省依照存儲(chǔ)模式存放。當(dāng)然也可以顯式定義指針本身存放的存儲(chǔ)區(qū),如:當(dāng)然也可以顯式定義指針本身存放的存儲(chǔ)區(qū),如:char *data str;/*指針指針str存放在內(nèi)部直接尋址區(qū)存放在內(nèi)部直接尋址區(qū)*/int *idata ptr; /*指針指針 ptr存放于內(nèi)部間接尋址區(qū)存放于內(nèi)部間接尋址區(qū)*/long *xdata lptr;/*指針指針 lptr存放于外部數(shù)據(jù)區(qū)存放于外部數(shù)據(jù)區(qū)*/通用指針用三個(gè)字節(jié)保存。第一個(gè)字節(jié)是存儲(chǔ)類型,第二通用指針用三個(gè)字節(jié)保存。第一個(gè)字節(jié)是存儲(chǔ)類型,第二個(gè)是偏移的高地址字節(jié),第三個(gè)是偏移的低地址字節(jié)。個(gè)

46、是偏移的高地址字節(jié),第三個(gè)是偏移的低地址字節(jié)。通通用指針指向的變量可以存放在用指針指向的變量可以存放在80C51存儲(chǔ)空間的任何區(qū)域存儲(chǔ)空間的任何區(qū)域。2指定存儲(chǔ)區(qū)的指針指定存儲(chǔ)區(qū)的指針指定存儲(chǔ)區(qū)的指針在指針的聲明中經(jīng)常包含一個(gè)存儲(chǔ)類型指定存儲(chǔ)區(qū)的指針在指針的聲明中經(jīng)常包含一個(gè)存儲(chǔ)類型標(biāo)識(shí)符標(biāo)識(shí)符指向一個(gè)確定的存儲(chǔ)區(qū)指向一個(gè)確定的存儲(chǔ)區(qū)。例如。例如:char data *str;/*指針指針str指向位于指向位于data區(qū)的區(qū)的char型變量型變量*/int xdata *ptr;/*指針指針ptr指向位于指向位于xdata區(qū)的區(qū)的int型變量型變量*/long code *tab; /*指針指

47、針tab指向位于指向位于code區(qū)的區(qū)的long型數(shù)據(jù)型數(shù)據(jù)*/ 可見,指定存儲(chǔ)區(qū)的指針的存儲(chǔ)類型是經(jīng)過(guò)顯式定義的,在可見,指定存儲(chǔ)區(qū)的指針的存儲(chǔ)類型是經(jīng)過(guò)顯式定義的,在編譯時(shí)是確定的。指定存儲(chǔ)區(qū)指針存放時(shí)不再像通用指針編譯時(shí)是確定的。指定存儲(chǔ)區(qū)指針存放時(shí)不再像通用指針那樣需要保存存儲(chǔ)類型,那樣需要保存存儲(chǔ)類型,指向指向idata、data 、bdata和和pdata存儲(chǔ)區(qū)的指針只需要一個(gè)字節(jié)存放存儲(chǔ)區(qū)的指針只需要一個(gè)字節(jié)存放,而,而code和和xdata指針也指針也才需要才需要兩字節(jié)兩字節(jié)。從而減少了指針長(zhǎng)度,節(jié)省了存儲(chǔ)空間。從而減少了指針長(zhǎng)度,節(jié)省了存儲(chǔ)空間。指定存儲(chǔ)區(qū)的指針指定存儲(chǔ)區(qū)的指

48、針只用來(lái)訪問(wèn)聲明在只用來(lái)訪問(wèn)聲明在80C51存儲(chǔ)區(qū)的變量存儲(chǔ)區(qū)的變量,提供了更有效的方法訪問(wèn)數(shù)據(jù)目標(biāo)。提供了更有效的方法訪問(wèn)數(shù)據(jù)目標(biāo)。 像通用指針一樣,可以指定像通用指針一樣,可以指定一個(gè)指定存儲(chǔ)區(qū)的指針的保存一個(gè)指定存儲(chǔ)區(qū)的指針的保存存儲(chǔ)區(qū)。存儲(chǔ)區(qū)。只需在指針聲明前加一個(gè)存儲(chǔ)類型標(biāo)識(shí)符即可,只需在指針聲明前加一個(gè)存儲(chǔ)類型標(biāo)識(shí)符即可,例如例如char data *xdata str;/*指針本身位于指針本身位于xdata區(qū),指向區(qū),指向data區(qū)的區(qū)的char型變量型變量*/int xdata *data ptr;/*指針本身位于指針本身位于data區(qū),指向區(qū),指向xdata區(qū)的區(qū)的int型變

49、量型變量*/long code *idata tab;/*指針本身位于指針本身位于idata區(qū),指向區(qū),指向code區(qū)的區(qū)的long型數(shù)據(jù)型數(shù)據(jù)*/需要說(shuō)明的是需要說(shuō)明的是:一個(gè)指定存儲(chǔ)區(qū)指針產(chǎn)生的代碼比一個(gè)通:一個(gè)指定存儲(chǔ)區(qū)指針產(chǎn)生的代碼比一個(gè)通用指針產(chǎn)生的代碼運(yùn)行速度快,因?yàn)榇鎯?chǔ)區(qū)在編譯時(shí)就知用指針產(chǎn)生的代碼運(yùn)行速度快,因?yàn)榇鎯?chǔ)區(qū)在編譯時(shí)就知道了指針指向的對(duì)象的存儲(chǔ)空間位置,編譯器可以用這些道了指針指向的對(duì)象的存儲(chǔ)空間位置,編譯器可以用這些信息優(yōu)化存儲(chǔ)區(qū)訪問(wèn)。而通用指針的存儲(chǔ)區(qū)在運(yùn)行前是未信息優(yōu)化存儲(chǔ)區(qū)訪問(wèn)。而通用指針的存儲(chǔ)區(qū)在運(yùn)行前是未知的,編譯器不能優(yōu)化存儲(chǔ)區(qū)訪問(wèn),必須產(chǎn)生可以訪問(wèn)任知

50、的,編譯器不能優(yōu)化存儲(chǔ)區(qū)訪問(wèn),必須產(chǎn)生可以訪問(wèn)任何存儲(chǔ)區(qū)的通用代碼。何存儲(chǔ)區(qū)的通用代碼。當(dāng)需要用到指針變量,我們可以根據(jù)需要選擇。當(dāng)需要用到指針變量,我們可以根據(jù)需要選擇。如果運(yùn)行如果運(yùn)行速度優(yōu)先就應(yīng)盡可能的用指定存儲(chǔ)區(qū)指針;如果想使指針?biāo)俣葍?yōu)先就應(yīng)盡可能的用指定存儲(chǔ)區(qū)指針;如果想使指針能適用于指向任何存儲(chǔ)空間,則可以定義指針為通用型能適用于指向任何存儲(chǔ)空間,則可以定義指針為通用型??傊?,同標(biāo)準(zhǔn)總之,同標(biāo)準(zhǔn)C一樣,不管使用哪種指針,一樣,不管使用哪種指針,一個(gè)指針變量一個(gè)指針變量只能指向同一類型(包括變量的數(shù)據(jù)類型和存儲(chǔ)類型)的只能指向同一類型(包括變量的數(shù)據(jù)類型和存儲(chǔ)類型)的變量變量,否則將

51、不能通過(guò)正確的方式訪問(wèn)所指向的對(duì)象所在,否則將不能通過(guò)正確的方式訪問(wèn)所指向的對(duì)象所在的存儲(chǔ)空間,生成的代碼存在的存儲(chǔ)空間,生成的代碼存在bug。 4.4.3 結(jié)構(gòu)體結(jié)構(gòu)體結(jié)構(gòu)是另一種構(gòu)造類型數(shù)據(jù)。結(jié)構(gòu)是由基本數(shù)據(jù)類型構(gòu)成的并結(jié)構(gòu)是另一種構(gòu)造類型數(shù)據(jù)。結(jié)構(gòu)是由基本數(shù)據(jù)類型構(gòu)成的并用一個(gè)標(biāo)識(shí)符來(lái)命名的各種變量的組合。結(jié)構(gòu)中可以使用不同用一個(gè)標(biāo)識(shí)符來(lái)命名的各種變量的組合。結(jié)構(gòu)中可以使用不同的數(shù)據(jù)類型。的數(shù)據(jù)類型。1結(jié)構(gòu)變量的定義結(jié)構(gòu)變量的定義在在C51定義中,結(jié)構(gòu)也是一種數(shù)據(jù)類型,可以使用結(jié)構(gòu)變量,定義中,結(jié)構(gòu)也是一種數(shù)據(jù)類型,可以使用結(jié)構(gòu)變量,因此,像其他類型的變量一樣,在使用結(jié)構(gòu)變量時(shí)先對(duì)其進(jìn)行

52、因此,像其他類型的變量一樣,在使用結(jié)構(gòu)變量時(shí)先對(duì)其進(jìn)行定義。定義。定義一個(gè)結(jié)構(gòu)類型的一般形式為:定義一個(gè)結(jié)構(gòu)類型的一般形式為:struct 結(jié)構(gòu)類型名結(jié)構(gòu)類型名/*struct為結(jié)構(gòu)類型關(guān)鍵字為結(jié)構(gòu)類型關(guān)鍵字*/成員表列成員表列/*對(duì)每個(gè)成員進(jìn)行類型說(shuō)明對(duì)每個(gè)成員進(jìn)行類型說(shuō)明*/;/*分號(hào)不能少分號(hào)不能少*/成員表由若干個(gè)成員組成,每個(gè)成員都是該結(jié)構(gòu)的一個(gè)組成部成員表由若干個(gè)成員組成,每個(gè)成員都是該結(jié)構(gòu)的一個(gè)組成部分,對(duì)每個(gè)成員也必須作類型說(shuō)明,格式為:分,對(duì)每個(gè)成員也必須作類型說(shuō)明,格式為:類型說(shuō)明符類型說(shuō)明符 成員名;成員名;struct stu int num; char name20;

53、 char sex; float score; 結(jié)構(gòu)名是結(jié)構(gòu)的標(biāo)識(shí)符,不是變量名。構(gòu)成結(jié)構(gòu)的每一個(gè)結(jié)構(gòu)名是結(jié)構(gòu)的標(biāo)識(shí)符,不是變量名。構(gòu)成結(jié)構(gòu)的每一個(gè)類型變量稱為結(jié)構(gòu)成員,它像數(shù)組的元素一樣,但數(shù)組中類型變量稱為結(jié)構(gòu)成員,它像數(shù)組的元素一樣,但數(shù)組中元素是以下標(biāo)來(lái)訪問(wèn)的,而結(jié)構(gòu)是按變量名字來(lái)訪問(wèn)成員元素是以下標(biāo)來(lái)訪問(wèn)的,而結(jié)構(gòu)是按變量名字來(lái)訪問(wèn)成員的。結(jié)構(gòu)定義以后,即可進(jìn)行變量說(shuō)明。凡說(shuō)明為結(jié)構(gòu)的。結(jié)構(gòu)定義以后,即可進(jìn)行變量說(shuō)明。凡說(shuō)明為結(jié)構(gòu)stu的變量都由上述的變量都由上述4個(gè)成員組成。由此可見,結(jié)構(gòu)是一種個(gè)成員組成。由此可見,結(jié)構(gòu)是一種復(fù)雜的數(shù)據(jù)類型。復(fù)雜的數(shù)據(jù)類型。結(jié)構(gòu)的成員類型可以為結(jié)構(gòu)

54、的成員類型可以為4種基本數(shù)據(jù)類型(整型、浮點(diǎn)型、種基本數(shù)據(jù)類型(整型、浮點(diǎn)型、字符型、指針型),也可以為字符型、指針型),也可以為數(shù)組數(shù)組類型。類型。例如:例如:sruct stuintnum;char name20;char sex;float score;stu_1,stu_2;也可以先定義結(jié)構(gòu)類型,再定義結(jié)構(gòu)類型變量。若如上已也可以先定義結(jié)構(gòu)類型,再定義結(jié)構(gòu)類型變量。若如上已經(jīng)定義一個(gè)結(jié)構(gòu)名為經(jīng)定義一個(gè)結(jié)構(gòu)名為stu的結(jié)構(gòu),則結(jié)構(gòu)變量可像如下形的結(jié)構(gòu),則結(jié)構(gòu)變量可像如下形式定義:式定義:struct stu stu_1,stu_2;2結(jié)構(gòu)變量的引用結(jié)構(gòu)變量的引用因?yàn)榻Y(jié)構(gòu)可以像其它類型的變

55、量一樣賦值、運(yùn)算,不同的是結(jié)構(gòu)因?yàn)榻Y(jié)構(gòu)可以像其它類型的變量一樣賦值、運(yùn)算,不同的是結(jié)構(gòu)變量以成員作為基本變量。對(duì)結(jié)構(gòu)變量的成員只能一個(gè)一個(gè)引用。變量以成員作為基本變量。對(duì)結(jié)構(gòu)變量的成員只能一個(gè)一個(gè)引用。引用結(jié)構(gòu)變量成員的方法有兩種:引用結(jié)構(gòu)變量成員的方法有兩種:用結(jié)構(gòu)變量名引用結(jié)構(gòu)成員,格式如下:用結(jié)構(gòu)變量名引用結(jié)構(gòu)成員,格式如下:結(jié)構(gòu)變量名結(jié)構(gòu)變量名.成員名成員名例如:例如:stu_1.score=89.5;用指向結(jié)構(gòu)的指針引用成員,格式如下:用指向結(jié)構(gòu)的指針引用成員,格式如下:指針變量名指針變量名-成員名成員名例如:例如:sruct stu *p;/*定義指向結(jié)構(gòu)體類型數(shù)據(jù)的定義指向結(jié)構(gòu)體

56、類型數(shù)據(jù)的指針指針p*/ p= &stu_1;/*指向結(jié)構(gòu)體變量指向結(jié)構(gòu)體變量stu_1*/ p-score=89.5;/*結(jié)構(gòu)變量結(jié)構(gòu)變量stu_1中成員中成員score的值賦為的值賦為89.5*/4.4.4 聯(lián)合體聯(lián)合體聯(lián)合體也稱公用體,聯(lián)合體中的成員是幾種不同類型的變聯(lián)合體也稱公用體,聯(lián)合體中的成員是幾種不同類型的變量,它們公用一個(gè)存儲(chǔ)區(qū)域,任意時(shí)刻只能存取其中的一量,它們公用一個(gè)存儲(chǔ)區(qū)域,任意時(shí)刻只能存取其中的一個(gè)變量,即一個(gè)變量被修改了,其他變量原來(lái)的值也消失個(gè)變量,即一個(gè)變量被修改了,其他變量原來(lái)的值也消失了。了。1聯(lián)合類型變量的定義聯(lián)合類型變量的定義聯(lián)合類型和聯(lián)合類型變量

57、可以像結(jié)構(gòu)那樣既可以一起定義,聯(lián)合類型和聯(lián)合類型變量可以像結(jié)構(gòu)那樣既可以一起定義,也可以先定義聯(lián)合類型,再定義聯(lián)合類型變量。聯(lián)合類型也可以先定義聯(lián)合類型,再定義聯(lián)合類型變量。聯(lián)合類型和變量一起定義的格式如下:和變量一起定義的格式如下:union 聯(lián)合類型名聯(lián)合類型名 /*union為聯(lián)合類型關(guān)鍵字為聯(lián)合類型關(guān)鍵字*/成員表列;成員表列; /*對(duì)每個(gè)成員進(jìn)行類型說(shuō)明對(duì)每個(gè)成員進(jìn)行類型說(shuō)明*/聯(lián)合變量名表列;聯(lián)合變量名表列;/*分號(hào)不能少分號(hào)不能少*/如果如果同一個(gè)數(shù)據(jù)要用不同的表達(dá)方式,可以定義為一同一個(gè)數(shù)據(jù)要用不同的表達(dá)方式,可以定義為一個(gè)聯(lián)合類型變量個(gè)聯(lián)合類型變量。例如:有一個(gè)雙字節(jié)的系統(tǒng)狀

58、態(tài)字,。例如:有一個(gè)雙字節(jié)的系統(tǒng)狀態(tài)字,有時(shí)按字節(jié)存取,有時(shí)按字存取,則可以定義下述聯(lián)有時(shí)按字節(jié)存取,有時(shí)按字存取,則可以定義下述聯(lián)合類型變量:合類型變量:union status/*定義聯(lián)合類型定義聯(lián)合類型*/unsigned char status2;unsigned char status_val;sys_status; /*同時(shí)定義聯(lián)合類型變量同時(shí)定義聯(lián)合類型變量*/2聯(lián)合類型變量的成員的引用聯(lián)合類型變量的成員的引用聯(lián)合類型變量成員的引用方法類似于結(jié)構(gòu):變量名聯(lián)合類型變量成員的引用方法類似于結(jié)構(gòu):變量名.成員名成員名例如:例如: sys_status.status_val=0; sys

59、_status.status1=0 x60;4.5 4.5 C51C51函數(shù)函數(shù)4.5.1 4.5.1 函數(shù)的說(shuō)明與函數(shù)的說(shuō)明與定義定義C51提供豐富的庫(kù)函數(shù)(如前面所用到的頭文件提供豐富的庫(kù)函數(shù)(如前面所用到的頭文件reg51.h、absacc.h等),只要在源文件開頭用等),只要在源文件開頭用#include包含相應(yīng)的頭文包含相應(yīng)的頭文件,就可以調(diào)用庫(kù)函數(shù),同時(shí)允許用戶根據(jù)任務(wù)自定義函數(shù)。件,就可以調(diào)用庫(kù)函數(shù),同時(shí)允許用戶根據(jù)任務(wù)自定義函數(shù)。用戶自定義的函數(shù)從參數(shù)形式上可分為無(wú)參函數(shù)和有參函數(shù)。用戶自定義的函數(shù)從參數(shù)形式上可分為無(wú)參函數(shù)和有參函數(shù)。有參函數(shù)就是在調(diào)用時(shí),調(diào)用函數(shù)用實(shí)際參數(shù)代

60、替形式參數(shù),有參函數(shù)就是在調(diào)用時(shí),調(diào)用函數(shù)用實(shí)際參數(shù)代替形式參數(shù),調(diào)用完后返回結(jié)果給調(diào)用函數(shù)。函數(shù)的一般形式如下:調(diào)用完后返回結(jié)果給調(diào)用函數(shù)。函數(shù)的一般形式如下:返回值類型返回值類型函數(shù)名(類型說(shuō)明函數(shù)名(類型說(shuō)明 形參表列)形參表列)局部變量聲明;局部變量聲明;執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句return(返回形參名);(返回形參名);其中形參表列的各項(xiàng)要用其中形參表列的各項(xiàng)要用“,”隔開。函數(shù)的返回值通過(guò)隔開。函數(shù)的返回值通過(guò)return語(yǔ)句返回給調(diào)用函數(shù),若函數(shù)沒(méi)有返回值,可以將返語(yǔ)句返回給調(diào)用函數(shù),若函數(shù)沒(méi)有返回值,可以將返回值類型設(shè)為回值類型設(shè)為void或缺省不寫?;蛉笔〔粚憽?4.5.2 函數(shù)的調(diào)用函數(shù)的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論