第5章 嵌入式C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)ppt課件_第1頁(yè)
第5章 嵌入式C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)ppt課件_第2頁(yè)
第5章 嵌入式C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)ppt課件_第3頁(yè)
第5章 嵌入式C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)ppt課件_第4頁(yè)
第5章 嵌入式C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩113頁(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、精選ppt第第5 5章章 嵌入式嵌入式C C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)語(yǔ)言程序設(shè)計(jì)基礎(chǔ)5.1 5.1 嵌入式嵌入式C C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令5.2 5.2 嵌入式嵌入式C C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型 5.3 5.3 程序的控制結(jié)構(gòu)程序的控制結(jié)構(gòu) 5.4 5.4 函函 數(shù)數(shù) 5.5 5.5 數(shù)組數(shù)組 5.6 5.6 指指 針針 5.7 5.7 構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型 5.8 5.8 匯編語(yǔ)言與匯編語(yǔ)言與C/C+C/C+的混合編程的混合編程5.9 5.9 嵌入式嵌入式LinuxLinux下下C C語(yǔ)言編程語(yǔ)言編程文件的操作文件的操作精選ppt5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽

2、指令語(yǔ)言的預(yù)處理偽指令1 1文件包含偽指令文件包含偽指令 文件包含偽指令可將頭文件包含到程序中,文件包含偽指令可將頭文件包含到程序中,頭文件中定義的內(nèi)容符號(hào)常量,復(fù)合變量原型、頭文件中定義的內(nèi)容符號(hào)常量,復(fù)合變量原型、用戶定義的變量原型和函數(shù)的原型說(shuō)明等。編用戶定義的變量原型和函數(shù)的原型說(shuō)明等。編譯器編譯預(yù)處理時(shí)用文件包含的正文件內(nèi)容替譯器編譯預(yù)處理時(shí)用文件包含的正文件內(nèi)容替換到實(shí)際程序中。換到實(shí)際程序中。(1 1)文件包含偽指令的格式)文件包含偽指令的格式# include # include .h ;標(biāo)準(zhǔn)頭文件;標(biāo)準(zhǔn)頭文件# include “# include “頭文件名頭文件名.h”

3、.h” ;自定義頭文件;自定義頭文件# include # include 宏標(biāo)識(shí)符宏標(biāo)識(shí)符 精選ppt5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令(2 2)包含文件偽指令的說(shuō)明)包含文件偽指令的說(shuō)明 常在頭文件名后用常在頭文件名后用.h.h作為擴(kuò)展名,可帶或不作為擴(kuò)展名,可帶或不帶路經(jīng)。帶路經(jīng)。 頭文件可分為標(biāo)準(zhǔn)頭文件和自定義頭文件。頭文件可分為標(biāo)準(zhǔn)頭文件和自定義頭文件。 尖括號(hào)內(nèi)的頭文件為標(biāo)準(zhǔn)頭文件,由開(kāi)發(fā)尖括號(hào)內(nèi)的頭文件為標(biāo)準(zhǔn)頭文件,由開(kāi)發(fā)環(huán)境或系統(tǒng)提供。環(huán)境或系統(tǒng)提供。 雙引號(hào)內(nèi)的頭文件為用戶自定義頭文件。雙引號(hào)內(nèi)的頭文件為用戶自定義頭文件。搜索時(shí),首先在當(dāng)前目錄中搜索,

4、其次按環(huán)搜索時(shí),首先在當(dāng)前目錄中搜索,其次按環(huán)境變量境變量includeinclude指定的目錄順序搜索。指定的目錄順序搜索。 搜索到頭文件后,就將該偽指令直接用頭文搜索到頭文件后,就將該偽指令直接用頭文件內(nèi)容替換。件內(nèi)容替換。精選ppt5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令例例5.1 5.1 標(biāo)準(zhǔn)頭文件定義標(biāo)準(zhǔn)頭文件定義# include # include # include # include string.hstring.h和和stdio.hstdio.h是標(biāo)準(zhǔn)頭文件,按環(huán)境變量是標(biāo)準(zhǔn)頭文件,按環(huán)境變量 includeinclude指定的目錄順序搜索指定的目錄順序搜

5、索string.hstring.h和和stdio.hstdio.h。例例5.2 5.2 用戶自定義頭文件定義用戶自定義頭文件定義 # include “s3c2410-adc.h”# include “s3c2410-adc.h” s3c2410-adc.h s3c2410-adc.h頭文件是用戶自定義有關(guān)三星頭文件是用戶自定義有關(guān)三星s3c2410s3c2410的的ARMARM處理器的處理器的A/DA/D轉(zhuǎn)換器各寄存器。轉(zhuǎn)換器各寄存器。精選ppt5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令2 2宏定義偽指令宏定義偽指令宏定義偽指令分為:簡(jiǎn)單宏、參數(shù)宏、條件宏、預(yù)定義宏及宏定義偽

6、指令分為:簡(jiǎn)單宏、參數(shù)宏、條件宏、預(yù)定義宏及宏釋放。宏釋放。(1 1)簡(jiǎn)單宏)簡(jiǎn)單宏格式如下:格式如下:# define # define 宏標(biāo)識(shí)符宏標(biāo)識(shí)符 宏體宏體 宏體是由單詞序列組成。宏體超長(zhǎng)時(shí),允許使用續(xù)行符宏體是由單詞序列組成。宏體超長(zhǎng)時(shí),允許使用續(xù)行符“”進(jìn)行續(xù)行,續(xù)行符和其后的換行符進(jìn)行續(xù)行,續(xù)行符和其后的換行符 n n 都不會(huì)進(jìn)入宏體。都不會(huì)進(jìn)入宏體。 在定義宏時(shí),應(yīng)盡量避免使用在定義宏時(shí),應(yīng)盡量避免使用C C語(yǔ)言的關(guān)鍵字和預(yù)處理器語(yǔ)言的關(guān)鍵字和預(yù)處理器的預(yù)定義宏,以免引起災(zāi)難性的后果。的預(yù)定義宏,以免引起災(zāi)難性的后果。 在源文件中,用預(yù)處理器偽指令定義過(guò)宏標(biāo)識(shí)符之后,在源文件

7、中,用預(yù)處理器偽指令定義過(guò)宏標(biāo)識(shí)符之后,就可用宏標(biāo)識(shí)編寫程序。當(dāng)源文件被預(yù)處理器處理時(shí),每遇到就可用宏標(biāo)識(shí)編寫程序。當(dāng)源文件被預(yù)處理器處理時(shí),每遇到該宏標(biāo)識(shí)符,預(yù)處理器便將宏展為宏體。該宏標(biāo)識(shí)符,預(yù)處理器便將宏展為宏體。精選ppt5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令(2 2)參數(shù)宏)參數(shù)宏格式如下:格式如下:# define # define 宏標(biāo)識(shí)符(形式參數(shù)表)宏標(biāo)識(shí)符(形式參數(shù)表) 宏體宏體 形式參數(shù)表為逗號(hào)分割的形式參數(shù)。形式參數(shù)表為逗號(hào)分割的形式參數(shù)。 宏體是由單詞序列組成。宏體超長(zhǎng)時(shí),允許使用宏體是由單詞序列組成。宏體超長(zhǎng)時(shí),允許使用續(xù)行符續(xù)行符“”進(jìn)行續(xù)行,

8、續(xù)行符和其后的換行符進(jìn)行續(xù)行,續(xù)行符和其后的換行符 n n 都不會(huì)進(jìn)入宏體。都不會(huì)進(jìn)入宏體。 使用參數(shù)宏時(shí),形式參數(shù)表應(yīng)換為同樣個(gè)數(shù)的實(shí)使用參數(shù)宏時(shí),形式參數(shù)表應(yīng)換為同樣個(gè)數(shù)的實(shí)參數(shù)表,這一點(diǎn)類似于函數(shù)的調(diào)用。參數(shù)宏與函數(shù)參數(shù)表,這一點(diǎn)類似于函數(shù)的調(diào)用。參數(shù)宏與函數(shù)的區(qū)別在于參數(shù)宏的形參數(shù)表中沒(méi)有類型說(shuō)明符。的區(qū)別在于參數(shù)宏的形參數(shù)表中沒(méi)有類型說(shuō)明符。 預(yù)處理器在處理參數(shù)宏時(shí)使用預(yù)處理器在處理參數(shù)宏時(shí)使用2 2遍宏展開(kāi)。第遍宏展開(kāi)。第1 1遍遍展開(kāi)宏體,第展開(kāi)宏體,第2 2遍對(duì)展開(kāi)后的宏體用實(shí)參數(shù)替換形遍對(duì)展開(kāi)后的宏體用實(shí)參數(shù)替換形式參數(shù)。式參數(shù)。精選ppt例例5.3 5.3 在在LinuxL

9、inux系統(tǒng)的系統(tǒng)的/include/asm-arm/arch-/include/asm-arm/arch-s3c2410/S3C2410.hs3c2410/S3C2410.h頭文件中定義了各頭文件中定義了各Nand FlashNand Flash控制寄控制寄存器,其源代碼如下:存器,其源代碼如下:#define bNAND_CTL(Nb) _REG(0 x4e000000 + (Nb)#define NFCONF bNAND_CTL(0 x00)#define NFCONF bNAND_CTL(0 x00)#define NFCMD bNAND_CTL(0 x04)#define NFCMD

10、 bNAND_CTL(0 x04)#define NFADDR bNAND_CTL(0 x08)#define NFADDR bNAND_CTL(0 x08)#define NFDATA bNAND_CTL(0 x0c)#define NFDATA bNAND_CTL(0 x0c)#define NFSTAT bNAND_CTL(0 x10)#define NFSTAT bNAND_CTL(0 x10)#define NFECC bNAND_CTL(0 x14)#define NFECC bNAND_CTL(0 x14)5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令精選ppt5.1

11、 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令例例5.4 5.4 在在LinuxLinux下下ARM S3C2410XARM S3C2410X芯片的芯片的A/DA/D轉(zhuǎn)換的驅(qū)動(dòng)轉(zhuǎn)換的驅(qū)動(dòng)程序的頭文件程序的頭文件s3c2410-adc.hs3c2410-adc.h中定義了下面三個(gè)宏。中定義了下面三個(gè)宏。#define ADC_WRITE(ch, prescale) (ch)16)&0 x7)#define ADC_WRITE_GETCH(data) (data)16)&0 x7) / /* *獲得獲得ADCADC通道號(hào)通道號(hào)* */ /#define ADC_WRITE_G

12、ETPRE(data) (data)&0 xff)#define ADC_WRITE_GETPRE(data) (data)&0 xff) / /* *獲得獲得ADCADC的預(yù)定標(biāo)值的預(yù)定標(biāo)值* */ /精選ppt 例例5.5 5.5 在在LinuxLinux下下ARM S3C2410XARM S3C2410X芯片的芯片的A/DA/D轉(zhuǎn)換的驅(qū)動(dòng)程轉(zhuǎn)換的驅(qū)動(dòng)程序?qū)崿F(xiàn)代碼序?qū)崿F(xiàn)代碼s3c2410-adc.cs3c2410-adc.c中的系統(tǒng)資源和宏定義。中的系統(tǒng)資源和宏定義。#define DEVICE_NAME s3c2410-adc“#define DEVICE_NAME s3

13、c2410-adc“ / /* *定義定義ADCADC設(shè)備的名字設(shè)備的名字* */ /#define ADCRAW_MINOR 1 #define ADCRAW_MINOR 1 static int adcMajor = 0; /static int adcMajor = 0; /* *定義定義ADCADC設(shè)備的主設(shè)備號(hào)設(shè)備的主設(shè)備號(hào)* */ /typedef struct typedef struct struct semaphore lock; /struct semaphore lock; /* *內(nèi)核信號(hào)量,當(dāng)多個(gè)用戶程序同時(shí)內(nèi)核信號(hào)量,當(dāng)多個(gè)用戶程序同時(shí)訪問(wèn)一個(gè)訪問(wèn)一個(gè)ADCADC控

14、制器時(shí),用控制器時(shí),用lock lock 進(jìn)行同步進(jìn)行同步* */ /wait_queue_head_t wait; /wait_queue_head_t wait; /* *等待隊(duì)列等待隊(duì)列* */ /int channel; /int channel; /* *ADCADC通道號(hào)通道號(hào)* */ /int prescale; /int prescale; /* *預(yù)定標(biāo)值預(yù)定標(biāo)值* */ /ADC_DEV;ADC_DEV;5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令精選pptstatic ADC_DEV adcdev;static ADC_DEV adcdev;#define

15、START_ADC_AIN(ch, prescale) #define START_ADC_AIN(ch, prescale) do ADCCON = PRESCALE_EN | PRSCVL(prescale) | do ADCCON = PRESCALE_EN | PRSCVL(prescale) | ADC_INPUT(ch) ; ADC_INPUT(ch) ; ADCCON |= ADC_START; ADCCON |= ADC_START; while(0while(0)/*設(shè)置設(shè)置S3C2410X的的ADC的通道為的通道為ch、預(yù)定標(biāo)值為、預(yù)定標(biāo)值為prescale*/ PRESC

16、ALE_EN/ PRESCALE_EN 宏對(duì)應(yīng)宏對(duì)應(yīng)ARM S3C2410XARM S3C2410X芯片的芯片的A/DA/D轉(zhuǎn)換控制寄存轉(zhuǎn)換控制寄存器的第器的第1414位位 PRSCEMNPRSCEMN,即,即A/DA/D轉(zhuǎn)換器預(yù)標(biāo)器使能;轉(zhuǎn)換器預(yù)標(biāo)器使能;/ PRSCVL/ PRSCVL宏對(duì)應(yīng)宏對(duì)應(yīng)ARM S3C2410XARM S3C2410X芯片的芯片的A/DA/D轉(zhuǎn)換控制寄存器的第轉(zhuǎn)換控制寄存器的第6 6位,設(shè)置預(yù)定標(biāo)值;位,設(shè)置預(yù)定標(biāo)值;/ ADC_INPUT / ADC_INPUT 宏對(duì)應(yīng)宏對(duì)應(yīng)ARM S3C2410XARM S3C2410X芯片的芯片的A/DA/D轉(zhuǎn)換控制寄存轉(zhuǎn)換

17、控制寄存器的第器的第3 53 5位,選擇通道號(hào);位,選擇通道號(hào);/ADCCON |= ADC_START; ADCCON 0 /ADCCON |= ADC_START; ADCCON 0 為置為置1 1,準(zhǔn)備采集數(shù)據(jù),準(zhǔn)備采集數(shù)據(jù)5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令精選ppt5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令(3 3)條件宏定義)條件宏定義格式如下:格式如下:格式格式1 1:# ifdef # ifdef 宏標(biāo)識(shí)符宏標(biāo)識(shí)符 # undef # undef 宏標(biāo)識(shí)符宏標(biāo)識(shí)符 # define # define 宏標(biāo)識(shí)符宏標(biāo)識(shí)符 宏體宏體# else

18、# else # define # define 宏標(biāo)識(shí)符宏標(biāo)識(shí)符 宏體宏體# endif# endif精選ppt格式格式2 2:# ifndef # ifndef 宏標(biāo)識(shí)符宏標(biāo)識(shí)符 # define # define 宏標(biāo)識(shí)符宏標(biāo)識(shí)符 宏體宏體# else # else # undef # undef 宏標(biāo)識(shí)符宏標(biāo)識(shí)符# define # define 宏標(biāo)識(shí)符宏標(biāo)識(shí)符 宏體宏體# endif# endif其中:其中: 格式格式1 1是測(cè)試存在,格式是測(cè)試存在,格式2 2是測(cè)試不存在。是測(cè)試不存在。 else else可有,也可沒(méi)有??捎校部蓻](méi)有。5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)

19、言的預(yù)處理偽指令精選ppt5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令(4 4)宏釋放)宏釋放用于釋放原先定義的宏標(biāo)識(shí)符。經(jīng)釋放后的宏標(biāo)識(shí)符用于釋放原先定義的宏標(biāo)識(shí)符。經(jīng)釋放后的宏標(biāo)識(shí)符可再次用于定義其他宏體。可再次用于定義其他宏體。格式如下:格式如下:# undef # undef 宏標(biāo)識(shí)符宏標(biāo)識(shí)符例例5.6 5.6 #define SIZE 512 #define SIZE 512 buf=SIZEbuf=SIZE* *blks /blks /* *宏擴(kuò)展為宏擴(kuò)展為buf=512buf=512* *blks; blks; * */ /undef SIZE undef SIZE

20、 #define SIZE 128#define SIZE 128buf=SIZEbuf=SIZE* *blks /blks /* *宏擴(kuò)展為宏擴(kuò)展為buf=128buf=128* *blks; blks; * */ /精選ppt5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令3 3條件編譯偽指令條件編譯偽指令格式如下:格式如下:# if# if(條件表達(dá)式(條件表達(dá)式1 1) # elif # elif (條件表達(dá)式(條件表達(dá)式2 2) # elif # elif (條件表達(dá)式(條件表達(dá)式3 3)# elif # elif (條件表達(dá)式(條件表達(dá)式n n)# else# else#

21、 endif# endif精選ppt5.1 嵌入式嵌入式C語(yǔ)言的預(yù)處理偽指令語(yǔ)言的預(yù)處理偽指令例例5.7 5.7 # if _B0SIZE=B0SIZE_BYTE# if _B0SIZE=B0SIZE_BYTEtypedef unsigned char PB0SIZEtypedef unsigned char PB0SIZE;# elif _B0SIZE=B0SIZE_SHORT# elif _B0SIZE=B0SIZE_SHORTtypedef unsigned short PB0SIZEtypedef unsigned short PB0SIZE;# elif _B0SIZE=B0SIZE

22、_WORD# elif _B0SIZE=B0SIZE_WORDtypedef unsigned long PB0SIZEtypedef unsigned long PB0SIZE;# endif# endif精選ppt5.2嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型 5.2.1 5.2.1 數(shù)據(jù)類型與表達(dá)式數(shù)據(jù)類型與表達(dá)式精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型(1) (1) 類型修飾符類型修飾符 精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型(2) (2) 訪問(wèn)修飾符訪問(wèn)修飾符C C語(yǔ)言有兩個(gè)用于控制訪問(wèn)和修改變量方式的修飾符,語(yǔ)言有

23、兩個(gè)用于控制訪問(wèn)和修改變量方式的修飾符,分別是常量分別是常量(const)(const)和易變量和易變量(volatile)(volatile)。帶。帶constconst修飾符定修飾符定義出的常量在程序運(yùn)行過(guò)程中始終保持不變。義出的常量在程序運(yùn)行過(guò)程中始終保持不變。例如:例如: const int numconst int num; 例如:例如: const int num=100const int num=100; volatilevolatile修飾符用于提醒編譯程序,該變量的值可以修飾符用于提醒編譯程序,該變量的值可以不通過(guò)程序中明確定義的方法來(lái)改變。不通過(guò)程序中明確定義的方法來(lái)改變。

24、constconst和和volatilevolatile可以同時(shí)使用。可以同時(shí)使用。例如,假設(shè)例如,假設(shè)0 x300 x30是一個(gè)只隨外部條件而變化的口地是一個(gè)只隨外部條件而變化的口地址值,那么就恰好需要用下述說(shuō)明來(lái)避免偶然因素所產(chǎn)址值,那么就恰好需要用下述說(shuō)明來(lái)避免偶然因素所產(chǎn)生的副作用的影響。生的副作用的影響。 const volatile unsigned char const volatile unsigned char * *port=0 x30port=0 x30; 精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型2. 2. 構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型 n數(shù)組數(shù)組

25、是一組連續(xù)、有序的存放在一起的具有相是一組連續(xù)、有序的存放在一起的具有相同類型的數(shù)據(jù)。同類型的數(shù)據(jù)。n結(jié)構(gòu)體結(jié)構(gòu)體是將不同類型的數(shù)據(jù)按一定順序存放在是將不同類型的數(shù)據(jù)按一定順序存放在一起的數(shù)據(jù)結(jié)構(gòu)。一起的數(shù)據(jù)結(jié)構(gòu)。n共用體共用體是將不同類型的數(shù)據(jù)都存放在同一起始是將不同類型的數(shù)據(jù)都存放在同一起始地址的內(nèi)存單元中,共用一段內(nèi)存以節(jié)省內(nèi)存單地址的內(nèi)存單元中,共用一段內(nèi)存以節(jié)省內(nèi)存單元。元。n枚舉枚舉是只有幾種可能的值,將其一一列舉出來(lái)。是只有幾種可能的值,將其一一列舉出來(lái)。實(shí)際是用符號(hào)來(lái)表示若干個(gè)可取的整型值,它是實(shí)際是用符號(hào)來(lái)表示若干個(gè)可取的整型值,它是整型的一個(gè)子集。整型的一個(gè)子集。 精選pp

26、t5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型3. 3. 指針類型指針類型 n指針可以有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);能動(dòng)指針可以有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);能動(dòng)態(tài)分配內(nèi)存;能方便地使用字符串;有效而態(tài)分配內(nèi)存;能方便地使用字符串;有效而方便地使用數(shù)組;在調(diào)用函數(shù)時(shí)能得到多于方便地使用數(shù)組;在調(diào)用函數(shù)時(shí)能得到多于一個(gè)的值;能直接處理內(nèi)存地址等。一個(gè)的值;能直接處理內(nèi)存地址等。n指針類型迥異于前述各種數(shù)據(jù)類型,不管是指針類型迥異于前述各種數(shù)據(jù)類型,不管是簡(jiǎn)單類型的數(shù)據(jù),還是構(gòu)造類型數(shù)據(jù),均是簡(jiǎn)單類型的數(shù)據(jù),還是構(gòu)造類型數(shù)據(jù),均是代表數(shù)據(jù)的,而指針類型是代表地址的。代表數(shù)據(jù)的,而指針類型是代

27、表地址的。精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型5.2.2 5.2.2 常量常量1. 1. 數(shù)值常量數(shù)值常量 (1) (1) 整型常量整型常量整型常量也稱為整型常數(shù)或整數(shù)。整型常量也稱為整型常數(shù)或整數(shù)。C C整型常量按進(jìn)制分可分為十進(jìn)制整數(shù),八進(jìn)整型常量按進(jìn)制分可分為十進(jìn)制整數(shù),八進(jìn)制整數(shù)和十六進(jìn)制整數(shù)。制整數(shù)和十六進(jìn)制整數(shù)。(2) (2) 實(shí)型常量實(shí)型常量實(shí)型常量有單精度實(shí)型常量和雙精度實(shí)型常量。實(shí)型常量有單精度實(shí)型常量和雙精度實(shí)型常量??捎眯?shù)形式或指數(shù)形式表示。可用小數(shù)形式或指數(shù)形式表示。(3) (3) 字符常量字符常量精選ppt5.2 嵌入式嵌入式C語(yǔ)言的

28、基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型2. 2. 字符串常量字符串常量 字符串常量簡(jiǎn)稱字符串,是用一對(duì)雙引號(hào)括字符串常量簡(jiǎn)稱字符串,是用一對(duì)雙引號(hào)括起來(lái)的字符序列。起來(lái)的字符序列。 例如例如“China”China”就是一個(gè)字符串常量。就是一個(gè)字符串常量。若數(shù)字被定義為字符型之后就不能參與數(shù)值若數(shù)字被定義為字符型之后就不能參與數(shù)值運(yùn)算,如運(yùn)算,如55和和5 5是不同的。是不同的。55是字符常量,不是字符常量,不能直接參與運(yùn)算,而只能以其能直接參與運(yùn)算,而只能以其ASCIIASCII碼值(碼值(0 x350 x35)來(lái)參與運(yùn)算。來(lái)參與運(yùn)

29、算。精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型3. 3. 符號(hào)常量符號(hào)常量(1 1)不帶參數(shù)的宏定義)不帶參數(shù)的宏定義宏定義命令宏定義命令definedefine的一般形式是:的一般形式是: define define 宏名宏名 字符串字符串 用來(lái)終止宏名作用域命令用來(lái)終止宏名作用域命令undefundef的一般形式是:的一般形式是:undef undef 宏名宏名例例5.85.8: define PI 3.14159define PI 3.14159/ /* *定義定義PIPI為常量,其值是為常量,其值是3.14159 3.14159 * */ /main( )ma

30、in( ) undef PI /undef PI /* *終止宏名終止宏名PIPI的作用域的作用域* */ /f1( )f1( )精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型(2 2)帶參數(shù)的宏定義)帶參數(shù)的宏定義它不是進(jìn)行簡(jiǎn)單的字符串替換,還要進(jìn)行參數(shù)替換。它不是進(jìn)行簡(jiǎn)單的字符串替換,還要進(jìn)行參數(shù)替換。 其定義的一般形式為:其定義的一般形式為:define define 宏名宏名( (參數(shù)表參數(shù)表) ) 字符串字符串其中字符串中包括參數(shù)表中所指定的參數(shù)。在使用時(shí),其中字符串中包括參數(shù)表中所指定的參數(shù)。在使用時(shí),要將程序中宏名后的實(shí)際參數(shù)代入字符串中參數(shù)的位置。要將程序

31、中宏名后的實(shí)際參數(shù)代入字符串中參數(shù)的位置。例如:例如: define S(a, b) adefine S(a, b) a* *b b area=S(3, 2)area=S(3, 2); 經(jīng)編譯預(yù)處理,經(jīng)編譯預(yù)處理, 該語(yǔ)句被展開(kāi)成該語(yǔ)句被展開(kāi)成 area=3area=3* *2 2; 精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型 說(shuō)明:說(shuō)明: (1) (1) 宏名和參數(shù)表左括號(hào)之間不能有空格,宏名和參數(shù)表左括號(hào)之間不能有空格, 否則按不帶參宏替否則按不帶參宏替換了。換了。 (2) (2) 字符串中應(yīng)注意括號(hào)的使用,以保證運(yùn)算次序。如上例改字符串中應(yīng)注意括號(hào)的使用,以保證

32、運(yùn)算次序。如上例改成成area=S(1+2, 2)area=S(1+2, 2); 經(jīng)展開(kāi)后變成經(jīng)展開(kāi)后變成area=1+2area=1+2* *2 2; 這就不合要求了。這就不合要求了。 此時(shí),此時(shí), 可改寫成可改寫成 define S(a, b) (a)define S(a, b) (a)* *(b)(b) area=S(1+2, 2)area=S(1+2, 2)經(jīng)展開(kāi)后變成經(jīng)展開(kāi)后變成 area=(1+2)area=(1+2)* *(2)(2); 就不會(huì)出現(xiàn)錯(cuò)誤了。就不會(huì)出現(xiàn)錯(cuò)誤了。 精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型5.2.3 5.2.3 變量變量 1.

33、 1. 變量的定義變量的定義 變量定義的一般形式如下:變量定義的一般形式如下: 存儲(chǔ)類型存儲(chǔ)類型 類型說(shuō)明符類型說(shuō)明符 修飾符修飾符 標(biāo)識(shí)符標(biāo)識(shí)符 =初初值值 ,標(biāo)識(shí)符,標(biāo)識(shí)符=初值初值 ;變量的定義由變量的定義由5 5部分組成,方括號(hào)中的可有可無(wú),部分組成,方括號(hào)中的可有可無(wú),變量定義的具體情況而定。變量定義的具體情況而定。精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型(1 1)類型說(shuō)明符)類型說(shuō)明符 對(duì)于數(shù)字與字符,其常用的類型主要有對(duì)于數(shù)字與字符,其常用的類型主要有8 8種:種:charchar、unsigned unsigned charchar、intint、u

34、nsignedunsigned、longlong、unsigned longunsigned long、floatfloat、doubledouble。 void void 類型(抽象型),在具體化時(shí)可用類型強(qiáng)制來(lái)指定類型類型(抽象型),在具體化時(shí)可用類型強(qiáng)制來(lái)指定類型說(shuō)明符中的任意一類。說(shuō)明符中的任意一類。 通過(guò)通過(guò)typedeftypedef定義的類型別名。為了增加程序的可讀性和移植定義的類型別名。為了增加程序的可讀性和移植程序時(shí)的方便,程序時(shí)的方便,C C語(yǔ)言允許用戶為語(yǔ)言允許用戶為C C語(yǔ)言固有的類型用語(yǔ)言固有的類型用typedeftypedef起別名。起別名。格式如下:格式如下:ty

35、pedef Ctypedef C固有的簡(jiǎn)單類型或復(fù)合類型別名標(biāo)識(shí)符固有的簡(jiǎn)單類型或復(fù)合類型別名標(biāo)識(shí)符 ;用別名代替原來(lái)的類型,在說(shuō)明中用作類型說(shuō)明符。別名一般用用別名代替原來(lái)的類型,在說(shuō)明中用作類型說(shuō)明符。別名一般用大寫字符,例如:大寫字符,例如:typedef long BIGtypedef long BIGBIG x=80000;BIG x=80000;精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型(2) (2) 標(biāo)識(shí)符標(biāo)識(shí)符 變量名可以是變量名可以是C C語(yǔ)言中允許的合法標(biāo)識(shí)符。語(yǔ)言中允許的合法標(biāo)識(shí)符。 每一個(gè)變量都必須進(jìn)行類型說(shuō)明,也就是變量要先定義,后每一個(gè)變量

36、都必須進(jìn)行類型說(shuō)明,也就是變量要先定義,后使用。使用。 當(dāng)一個(gè)變量被指定為某一確定類型時(shí),將為它分配若干相應(yīng)當(dāng)一個(gè)變量被指定為某一確定類型時(shí),將為它分配若干相應(yīng)字節(jié)的內(nèi)存空間。如在字節(jié)的內(nèi)存空間。如在3232位體系的位體系的ARMARM系統(tǒng)中,系統(tǒng)中,charchar型為型為1 1字字節(jié),節(jié),intint型為型為4 4字節(jié),字節(jié),floatfloat為為4 4字節(jié),字節(jié),doubledouble為為8 8字節(jié)。當(dāng)然,不字節(jié)。當(dāng)然,不同的體系結(jié)構(gòu)的系統(tǒng)可能稍有差異。同的體系結(jié)構(gòu)的系統(tǒng)可能稍有差異。 變量可以在程序內(nèi)的三個(gè)地方定義:變量可以在程序內(nèi)的三個(gè)地方定義: 在函數(shù)內(nèi)部,在函數(shù)內(nèi)部, 在函數(shù)

37、的在函數(shù)的參數(shù)(形參)定義中或在所有的函數(shù)外部。由此定義的變量分參數(shù)(形參)定義中或在所有的函數(shù)外部。由此定義的變量分別稱為局部變量,別稱為局部變量, 形式參數(shù)和全局變量。在不同地方定義的形式參數(shù)和全局變量。在不同地方定義的變量,其作用域范圍不同。在同一層次定義的變量不能與數(shù)組、變量,其作用域范圍不同。在同一層次定義的變量不能與數(shù)組、指針、函數(shù)和其它變量同名。指針、函數(shù)和其它變量同名。 變量是用來(lái)存放數(shù)據(jù)的,由于數(shù)據(jù)有不同的類型,因此要定變量是用來(lái)存放數(shù)據(jù)的,由于數(shù)據(jù)有不同的類型,因此要定義相應(yīng)類型的變量去存放它。這些數(shù)據(jù)稱為相應(yīng)變量的值。義相應(yīng)類型的變量去存放它。這些數(shù)據(jù)稱為相應(yīng)變量的值。

38、精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型 (3) (3) 存儲(chǔ)類型存儲(chǔ)類型 存儲(chǔ)類型指定被說(shuō)明對(duì)象所在內(nèi)存區(qū)域的屬性。存儲(chǔ)類型指定被說(shuō)明對(duì)象所在內(nèi)存區(qū)域的屬性。 存儲(chǔ)空間分為代碼區(qū)與數(shù)據(jù)區(qū)兩個(gè)部分。變量存儲(chǔ)在數(shù)據(jù)區(qū),存儲(chǔ)空間分為代碼區(qū)與數(shù)據(jù)區(qū)兩個(gè)部分。變量存儲(chǔ)在數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)又可分為靜態(tài)存儲(chǔ)區(qū)與動(dòng)態(tài)存儲(chǔ)區(qū)。數(shù)據(jù)區(qū)又可分為靜態(tài)存儲(chǔ)區(qū)與動(dòng)態(tài)存儲(chǔ)區(qū)。n靜態(tài)存儲(chǔ)是指在程序運(yùn)行期間給變量分配固定存儲(chǔ)空間的方式。靜態(tài)存儲(chǔ)是指在程序運(yùn)行期間給變量分配固定存儲(chǔ)空間的方式。如全局變量存放在靜態(tài)存儲(chǔ)區(qū)中,程序運(yùn)行時(shí)分配空間如全局變量存放在靜態(tài)存儲(chǔ)區(qū)中,程序運(yùn)行時(shí)分配空間, , 程序程序

39、運(yùn)行完釋放。運(yùn)行完釋放。n動(dòng)態(tài)存儲(chǔ)是指在程序運(yùn)行時(shí)根據(jù)實(shí)際需要?jiǎng)討B(tài)分配存儲(chǔ)空間的動(dòng)態(tài)存儲(chǔ)是指在程序運(yùn)行時(shí)根據(jù)實(shí)際需要?jiǎng)討B(tài)分配存儲(chǔ)空間的方式。如形式參數(shù)存放在動(dòng)態(tài)存儲(chǔ)區(qū)中,在函數(shù)調(diào)用時(shí)分配空方式。如形式參數(shù)存放在動(dòng)態(tài)存儲(chǔ)區(qū)中,在函數(shù)調(diào)用時(shí)分配空間,調(diào)用完成釋放。間,調(diào)用完成釋放。n對(duì)于靜態(tài)存儲(chǔ)方式的變量可在編譯時(shí)初始化,默認(rèn)初值為對(duì)于靜態(tài)存儲(chǔ)方式的變量可在編譯時(shí)初始化,默認(rèn)初值為0 0或或空字符。對(duì)動(dòng)態(tài)存儲(chǔ)方式的變量如不賦初值,則它的值是一個(gè)空字符。對(duì)動(dòng)態(tài)存儲(chǔ)方式的變量如不賦初值,則它的值是一個(gè)不確定的值。不確定的值。n在在C C語(yǔ)言中,具體的存儲(chǔ)類別有自動(dòng)(語(yǔ)言中,具體的存儲(chǔ)類別有自動(dòng)(aut

40、oauto)、寄存器)、寄存器(registerregister)、靜態(tài)()、靜態(tài)(staticstatic)及外部()及外部(externextern)四種。靜態(tài)存儲(chǔ))四種。靜態(tài)存儲(chǔ)類別與外部存儲(chǔ)類別變量存放在靜態(tài)存儲(chǔ)區(qū),自動(dòng)存儲(chǔ)類別變類別與外部存儲(chǔ)類別變量存放在靜態(tài)存儲(chǔ)區(qū),自動(dòng)存儲(chǔ)類別變量存放在動(dòng)態(tài)存儲(chǔ)區(qū),寄存器存儲(chǔ)類別直接送寄存器。量存放在動(dòng)態(tài)存儲(chǔ)區(qū),寄存器存儲(chǔ)類別直接送寄存器。精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型 局部變量的存儲(chǔ)方式局部變量的存儲(chǔ)方式 局部變量一般用自動(dòng)方式存儲(chǔ),用保留字局部變量一般用自動(dòng)方式存儲(chǔ),用保留字autoauto加以定加以定義,

41、此時(shí)稱為自動(dòng)變量,是動(dòng)態(tài)存儲(chǔ),在函數(shù)的調(diào)用過(guò)義,此時(shí)稱為自動(dòng)變量,是動(dòng)態(tài)存儲(chǔ),在函數(shù)的調(diào)用過(guò)程中存在,由編譯系統(tǒng)自動(dòng)處理。例如:程中存在,由編譯系統(tǒng)自動(dòng)處理。例如:void f( )void f( ) auto int i, j; auto int i, j; auto float x, y; auto float x, y; / /* *局部變量局部變量i i,j j,x x,y y以自動(dòng)方式存儲(chǔ)以自動(dòng)方式存儲(chǔ)* */ / C C語(yǔ)言規(guī)定,自動(dòng)變量可省去說(shuō)明符語(yǔ)言規(guī)定,自動(dòng)變量可省去說(shuō)明符autoauto。如果希望。如果希望函數(shù)調(diào)用完后局部變量的值被保留,不釋放其所占存儲(chǔ)函數(shù)調(diào)用完后局部變量

42、的值被保留,不釋放其所占存儲(chǔ)單元,這時(shí)必須將其存儲(chǔ)方式定義為靜態(tài)存儲(chǔ)方式,用單元,這時(shí)必須將其存儲(chǔ)方式定義為靜態(tài)存儲(chǔ)方式,用保留字保留字staticstatic加以定義。加以定義。精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型 全局變量的存儲(chǔ)方式全局變量的存儲(chǔ)方式 全局變量一般用外部存儲(chǔ)方式存儲(chǔ),用保留全局變量一般用外部存儲(chǔ)方式存儲(chǔ),用保留字字externextern加以定義。加以定義。 變量的作用域是構(gòu)成整個(gè)程序的所有程序文變量的作用域是構(gòu)成整個(gè)程序的所有程序文件,也就是定義的外部變量可供其它程序文件使件,也就是定義的外部變量可供其它程序文件使用。用。精選ppt5.2

43、嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型例如例如5.9 5.9 程序由兩個(gè)程序文件與組成。程序由兩個(gè)程序文件與組成。/ /* * */ /extern int a; /extern int a; /* *定義定義externextern存儲(chǔ)方式變量存儲(chǔ)方式變量a a* */ /main( )main( ) int pow( ); int pow( ); int n; int n; int p; int p; scanfscanf(%d, &n%d, &n); ; p=powp=pow(n n); ; printfprintf(p=%dn, pp=%dn, p); ;

44、精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型/ /* * */ /extern int a; /extern int a; /* *申明本文件中使用的是已定申明本文件中使用的是已定義的外部變量義的外部變量a a* */ /int powint pow(x x)int x; int x; int i, t=1; int i, t=1; forfor(i=1; i=x; i+i=1; i、=、=、=、=31);printf(%dn, 531);運(yùn)行輸出結(jié)果為運(yùn)行輸出結(jié)果為0 0。因?yàn)閮蓚€(gè)。因?yàn)閮蓚€(gè)是同一優(yōu)先級(jí),是同一優(yōu)先級(jí),5353的結(jié)果為的結(jié)果為1 1,而,而1111的關(guān)

45、系不滿足,所以最后結(jié)果為的關(guān)系不滿足,所以最后結(jié)果為0 0。又如:又如:printf(%dn,1=1135);printf(%dn,1=1135);運(yùn)行輸出結(jié)果為運(yùn)行輸出結(jié)果為1 1。因?yàn)椤R驗(yàn)榈膬?yōu)先級(jí)比的優(yōu)先級(jí)比=高,則高,則11351135的結(jié)的結(jié)果為果為1 1,而,而1=11=1的關(guān)系滿足,所以最后結(jié)果為的關(guān)系滿足,所以最后結(jié)果為1 1。 精選ppt5.2 嵌入式嵌入式C語(yǔ)言的基本數(shù)據(jù)類型語(yǔ)言的基本數(shù)據(jù)類型 3. 位運(yùn)算符位運(yùn)算符 精選ppt5.3 程序的控制結(jié)構(gòu)程序的控制結(jié)構(gòu) 5.3 5.3 程序的控制結(jié)構(gòu)程序的控制結(jié)構(gòu) 程序控制語(yǔ)句用于控制程序的流程,以程序控制語(yǔ)句用于控制程序的流程

46、,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。包括:實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。包括:條件判斷語(yǔ)句:條件判斷語(yǔ)句:if if ,switchswitch循環(huán)執(zhí)行語(yǔ)句:循環(huán)執(zhí)行語(yǔ)句:do whiledo while,whilewhile,forfor轉(zhuǎn)向語(yǔ)句:轉(zhuǎn)向語(yǔ)句:breakbreak,gotogoto,continuecontinue,returnreturn精選ppt5.3 程序的控制結(jié)構(gòu)程序的控制結(jié)構(gòu) 5.3.1 選擇結(jié)構(gòu)選擇結(jié)構(gòu) 用用if語(yǔ)句可以實(shí)現(xiàn)簡(jiǎn)單選擇結(jié)構(gòu)。其語(yǔ)法形式為語(yǔ)句可以實(shí)現(xiàn)簡(jiǎn)單選擇結(jié)構(gòu)。其語(yǔ)法形式為if(表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1else 語(yǔ)句語(yǔ)句2 執(zhí)行順序是:首先計(jì)算表達(dá)式的值,若表達(dá)式

47、執(zhí)行順序是:首先計(jì)算表達(dá)式的值,若表達(dá)式值為值為true,則執(zhí)行語(yǔ)句,則執(zhí)行語(yǔ)句1;否則執(zhí)行語(yǔ)句;否則執(zhí)行語(yǔ)句2。if語(yǔ)句中的語(yǔ)句語(yǔ)句中的語(yǔ)句2可以為空,當(dāng)語(yǔ)句可以為空,當(dāng)語(yǔ)句2為空時(shí),為空時(shí),else可以省略,成為如下形式:可以省略,成為如下形式:if(表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1 其中,語(yǔ)句其中,語(yǔ)句1和語(yǔ)句和語(yǔ)句2不僅可以是一條語(yǔ)句,而且不僅可以是一條語(yǔ)句,而且可以是大花括號(hào)括起來(lái)的多條語(yǔ)句,即復(fù)合語(yǔ)句。可以是大花括號(hào)括起來(lái)的多條語(yǔ)句,即復(fù)合語(yǔ)句。精選ppt5.3 程序的控制結(jié)構(gòu)程序的控制結(jié)構(gòu) 5.3.2 switch語(yǔ)句語(yǔ)句switch語(yǔ)句的語(yǔ)法形式如下:語(yǔ)句的語(yǔ)法形式如下:switch

48、(表達(dá)式表達(dá)式)case常量表達(dá)式常量表達(dá)式1:語(yǔ)句:語(yǔ)句1case常量表達(dá)式常量表達(dá)式2:語(yǔ)句:語(yǔ)句2case常量表達(dá)式常量表達(dá)式n:語(yǔ)句:語(yǔ)句ndefault: 語(yǔ)句語(yǔ)句 n+1精選ppt5.3 程序的控制結(jié)構(gòu)程序的控制結(jié)構(gòu) 5.3.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 嵌入式嵌入式Lunux C語(yǔ)言中有三種循環(huán)控制語(yǔ)句,語(yǔ)言中有三種循環(huán)控制語(yǔ)句,即即while,do while,for循環(huán)語(yǔ)句。循環(huán)語(yǔ)句。while和和do while是兩種不同的循環(huán)結(jié)構(gòu),即當(dāng)型循環(huán)和直型循是兩種不同的循環(huán)結(jié)構(gòu),即當(dāng)型循環(huán)和直型循環(huán),其格式如下:環(huán),其格式如下:1while語(yǔ)句(當(dāng)型循環(huán))語(yǔ)句(當(dāng)型循環(huán))while語(yǔ)句的

49、語(yǔ)法形式為:語(yǔ)句的語(yǔ)法形式為: while(表達(dá)式表達(dá)式) 循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句 精選ppt5.3 程序的控制結(jié)構(gòu)程序的控制結(jié)構(gòu) 5.3.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 2do-while語(yǔ)句(直型循環(huán))語(yǔ)句(直型循環(huán))語(yǔ)法形式:語(yǔ)法形式:do 循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句 while(表達(dá)式表達(dá)式); 執(zhí)行順序是:當(dāng)流程執(zhí)行到執(zhí)行順序是:當(dāng)流程執(zhí)行到do后,立即執(zhí)行循后,立即執(zhí)行循環(huán)體語(yǔ)句,然后再判斷循環(huán)條件表達(dá)式的值。當(dāng)表環(huán)體語(yǔ)句,然后再判斷循環(huán)條件表達(dá)式的值。當(dāng)表達(dá)式為達(dá)式為true時(shí),繼續(xù)執(zhí)行循環(huán)體;否則結(jié)束循環(huán),時(shí),繼續(xù)執(zhí)行循環(huán)體;否則結(jié)束循環(huán),該語(yǔ)句結(jié)構(gòu)使循環(huán)至少執(zhí)行一次。該語(yǔ)句結(jié)構(gòu)使循環(huán)至少執(zhí)行一

50、次。精選ppt5.3 程序的控制結(jié)構(gòu)程序的控制結(jié)構(gòu) 3 3forfor語(yǔ)句語(yǔ)句 forfor語(yǔ)句的使用最為靈活,既可以用于循環(huán)次數(shù)確定語(yǔ)句的使用最為靈活,既可以用于循環(huán)次數(shù)確定的情況,也可以用于循環(huán)次數(shù)未知的情況。的情況,也可以用于循環(huán)次數(shù)未知的情況。forfor語(yǔ)句的語(yǔ)語(yǔ)句的語(yǔ)法形式如下:法形式如下: for(for(表達(dá)式表達(dá)式1 1;表達(dá)式;表達(dá)式2 2;表達(dá)式;表達(dá)式3)3) for for語(yǔ)句的執(zhí)行流程為:語(yǔ)句的執(zhí)行流程為:(1) (1) 首先計(jì)算表達(dá)式首先計(jì)算表達(dá)式1 1的值。的值。(2) (2) 再計(jì)算表達(dá)式再計(jì)算表達(dá)式2 2,如果表達(dá)式,如果表達(dá)式2 2的值為的值為falsef

51、alse,則退,則退出循環(huán)。出循環(huán)。(3) (3) 如果表達(dá)式如果表達(dá)式2 2的值為的值為truetrue,則執(zhí)行一次循環(huán)體,然,則執(zhí)行一次循環(huán)體,然后計(jì)算表達(dá)式后計(jì)算表達(dá)式3 3的值。的值。(4) (4) 轉(zhuǎn)回轉(zhuǎn)回(2)(2),表達(dá)式,表達(dá)式2 2的值決定是否繼續(xù)執(zhí)行循環(huán)體。的值決定是否繼續(xù)執(zhí)行循環(huán)體。精選ppt5.3 程序的控制結(jié)構(gòu)程序的控制結(jié)構(gòu) 5.3.4 其他控制語(yǔ)句其他控制語(yǔ)句1break語(yǔ)句語(yǔ)句 break 語(yǔ)句只用于語(yǔ)句只用于switch語(yǔ)句或循環(huán)體中,作用是使語(yǔ)句或循環(huán)體中,作用是使程序從程序從switch語(yǔ)句內(nèi)跳出或結(jié)束本次循環(huán),轉(zhuǎn)去執(zhí)行后面的語(yǔ)句內(nèi)跳出或結(jié)束本次循環(huán),轉(zhuǎn)去執(zhí)

52、行后面的語(yǔ)句。由于語(yǔ)句。由于break語(yǔ)句的轉(zhuǎn)移方向是明確的,所以不需要語(yǔ)句語(yǔ)句的轉(zhuǎn)移方向是明確的,所以不需要語(yǔ)句標(biāo)號(hào)與之配合。標(biāo)號(hào)與之配合。2continue語(yǔ)句語(yǔ)句 continue語(yǔ)句僅用于循環(huán)體中,其作用是結(jié)束本次循語(yǔ)句僅用于循環(huán)體中,其作用是結(jié)束本次循環(huán),接著開(kāi)始判斷循環(huán)條件,決定是否繼續(xù)執(zhí)行下一次循環(huán)。環(huán),接著開(kāi)始判斷循環(huán)條件,決定是否繼續(xù)執(zhí)行下一次循環(huán)。3goto語(yǔ)句語(yǔ)句goto語(yǔ)句的語(yǔ)法格式為語(yǔ)句的語(yǔ)法格式為goto goto語(yǔ)句的作用是跳轉(zhuǎn)到語(yǔ)句標(biāo)號(hào)處執(zhí)行程序。語(yǔ)句的作用是跳轉(zhuǎn)到語(yǔ)句標(biāo)號(hào)處執(zhí)行程序。精選ppt5.4 函數(shù)函數(shù) 5.4 函函 數(shù)數(shù) 1函數(shù)定義函數(shù)定義 一個(gè)完整的

53、函數(shù)定義由兩部分組成,即函數(shù)頭與函數(shù)一個(gè)完整的函數(shù)定義由兩部分組成,即函數(shù)頭與函數(shù)體。函數(shù)定義的一般語(yǔ)法形式為:體。函數(shù)定義的一般語(yǔ)法形式為: (形式參數(shù)表形式參數(shù)表) 說(shuō)明性語(yǔ)句序列;說(shuō)明性語(yǔ)句序列;實(shí)現(xiàn)函數(shù)功能的語(yǔ)句系列;實(shí)現(xiàn)函數(shù)功能的語(yǔ)句系列; 其中,類型標(biāo)識(shí)符規(guī)定了函數(shù)的返回值類型。函數(shù)的返其中,類型標(biāo)識(shí)符規(guī)定了函數(shù)的返回值類型。函數(shù)的返回值是返回給主調(diào)函數(shù)的處理結(jié)果,由函數(shù)體部分的回值是返回給主調(diào)函數(shù)的處理結(jié)果,由函數(shù)體部分的return語(yǔ)句帶回。無(wú)返回值的函數(shù)其類型標(biāo)識(shí)符為語(yǔ)句帶回。無(wú)返回值的函數(shù)其類型標(biāo)識(shí)符為void,不必有,不必有return語(yǔ)句。形式參數(shù)表(簡(jiǎn)稱形參表)的內(nèi)容

54、如下:語(yǔ)句。形式參數(shù)表(簡(jiǎn)稱形參表)的內(nèi)容如下:類型類型l 形參名形參名1,類型,類型2 形參名形參名2,類型,類型n 形參名形參名n精選ppt5.4 函數(shù)函數(shù)2調(diào)用函數(shù)調(diào)用函數(shù) 調(diào)用函數(shù)必須遵守先定義后調(diào)用的原則,否則,調(diào)用函數(shù)必須遵守先定義后調(diào)用的原則,否則,需要在調(diào)用函數(shù)之前在主調(diào)函數(shù)中聲明函數(shù)原型。需要在調(diào)用函數(shù)之前在主調(diào)函數(shù)中聲明函數(shù)原型。函數(shù)原型聲明形式:函數(shù)原型聲明形式:(1) (參數(shù)類型參數(shù)類型1,參數(shù)類型參數(shù)類型2);(2) (參數(shù)類型參數(shù)類型1 參參數(shù)名數(shù)名1,參數(shù)類型,參數(shù)類型2 參數(shù)名參數(shù)名2);函數(shù)的調(diào)用形式:函數(shù)的調(diào)用形式:(實(shí)參實(shí)參1,實(shí)參,實(shí)參2,實(shí)參,實(shí)參n)

55、精選ppt5.4 函數(shù)函數(shù) 例如在例如在中出現(xiàn)的中出現(xiàn)的create_mappingcreate_mapping函數(shù)定義(省略了括號(hào)內(nèi)函數(shù)定義(省略了括號(hào)內(nèi)“”的語(yǔ)句)。的語(yǔ)句)。 static void _init create_mapping(struct static void _init create_mapping(struct map_desc map_desc * *md) md) 定義這個(gè)函數(shù)的各項(xiàng)含義如下:定義這個(gè)函數(shù)的各項(xiàng)含義如下: (1 1)類型說(shuō)明符)類型說(shuō)明符static void _initstatic void _init,其中的,其中的static static

56、 說(shuō)明符用于指明這個(gè)靜態(tài)的函數(shù)只可被這一文件內(nèi)的其他函數(shù)說(shuō)明符用于指明這個(gè)靜態(tài)的函數(shù)只可被這一文件內(nèi)的其他函數(shù)調(diào)用。調(diào)用。 void void 說(shuō)明符指明該函數(shù)是無(wú)返值類型。而說(shuō)明符指明該函數(shù)是無(wú)返值類型。而_init_init是是宏定義的說(shuō)明符。宏定義的說(shuō)明符。(2 2)函數(shù)名為)函數(shù)名為create_mappingcreate_mapping。(3 3)這個(gè)函數(shù)只有一個(gè)形式參數(shù))這個(gè)函數(shù)只有一個(gè)形式參數(shù)mdmd,其形參類說(shuō)明符,其形參類說(shuō)明符是是struct map_desc struct map_desc * *,是一個(gè)指向結(jié)構(gòu)體,是一個(gè)指向結(jié)構(gòu)體map_descmap_desc的指針。

57、的指針。精選ppt5.4 函數(shù)函數(shù) 3 3內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù) 內(nèi)聯(lián)函數(shù)與一般函數(shù)不同的是,它不是在內(nèi)聯(lián)函數(shù)與一般函數(shù)不同的是,它不是在調(diào)用時(shí)發(fā)生轉(zhuǎn)移,而是在編譯時(shí)將函數(shù)體嵌入在每一調(diào)用時(shí)發(fā)生轉(zhuǎn)移,而是在編譯時(shí)將函數(shù)體嵌入在每一個(gè)調(diào)用語(yǔ)句處。這樣就相對(duì)節(jié)省了參數(shù)傳遞、系統(tǒng)棧個(gè)調(diào)用語(yǔ)句處。這樣就相對(duì)節(jié)省了參數(shù)傳遞、系統(tǒng)棧的保護(hù)與恢復(fù)等的開(kāi)銷。的保護(hù)與恢復(fù)等的開(kāi)銷。 內(nèi)聯(lián)函數(shù)的定義形式為:內(nèi)聯(lián)函數(shù)的定義形式為: (含含類型說(shuō)明的形參表類型說(shuō)明的形參表) ) 函數(shù)體函數(shù)體 精選ppt5.4 函數(shù)函數(shù)例例5.12 內(nèi)聯(lián)函數(shù)例題。內(nèi)聯(lián)函數(shù)例題。 #include #include inline int ma

58、x(int a,int b) if(ab) return a;else return b;void main()int a,b,c,d;a=210;b=150;c=20;d=max(a,b);d=max(d,c);/編譯時(shí)兩個(gè)調(diào)用處均被替編譯時(shí)兩個(gè)調(diào)用處均被替換為換為max函數(shù)體語(yǔ)句函數(shù)體語(yǔ)句printf(The biggest of %d %d %d is %d, a,b,c,d)程序運(yùn)行結(jié)果為程序運(yùn)行結(jié)果為The biggest of 210 150 20 is 210The biggest of 210 150 20 is 210精選ppt5.4 函數(shù)函數(shù)4系統(tǒng)函數(shù)的使用系統(tǒng)函數(shù)的使用

59、系統(tǒng)函數(shù)的原型聲明由系系統(tǒng)函數(shù)的原型聲明由系統(tǒng)提供,并且已分類存于不同統(tǒng)提供,并且已分類存于不同的頭文件中。的頭文件中。 用用include指令嵌入相應(yīng)頭指令嵌入相應(yīng)頭文件,然后可使用系統(tǒng)函數(shù)。文件,然后可使用系統(tǒng)函數(shù)。include指令格式如下。指令格式如下。# include 其中:頭文件名可帶或不其中:頭文件名可帶或不帶路經(jīng),尖括號(hào)內(nèi)為標(biāo)準(zhǔn)頭文帶路經(jīng),尖括號(hào)內(nèi)為標(biāo)準(zhǔn)頭文件,由開(kāi)發(fā)環(huán)境或系統(tǒng)提供。件,由開(kāi)發(fā)環(huán)境或系統(tǒng)提供。若頭文件為用戶自定義頭文件,若頭文件為用戶自定義頭文件,則頭文件在雙引號(hào)內(nèi)。則頭文件在雙引號(hào)內(nèi)。例例5.13 標(biāo)準(zhǔn)頭文件定標(biāo)準(zhǔn)頭文件定義義# include # incl

60、ude string.h和和types.h是標(biāo)準(zhǔn)頭文件,按環(huán)境變是標(biāo)準(zhǔn)頭文件,按環(huán)境變量量 include指定的目錄順指定的目錄順序搜索序搜索string.h和和types.h。精選ppt5.4 函數(shù)函數(shù)4系統(tǒng)函數(shù)的使用系統(tǒng)函數(shù)的使用 系統(tǒng)函數(shù)的原型聲明由系系統(tǒng)函數(shù)的原型聲明由系統(tǒng)提供,并且已分類存于不同統(tǒng)提供,并且已分類存于不同的頭文件中。的頭文件中。 用用include指令嵌入相應(yīng)頭指令嵌入相應(yīng)頭文件,然后可使用系統(tǒng)函數(shù)。文件,然后可使用系統(tǒng)函數(shù)。include指令格式如下。指令格式如下。# include 其中:頭文件名可帶或不其中:頭文件名可帶或不帶路經(jīng),尖括號(hào)內(nèi)為標(biāo)準(zhǔn)頭文帶路經(jīng),尖括號(hào)內(nèi)為標(biāo)準(zhǔn)頭文件,由開(kāi)發(fā)環(huán)境或系統(tǒng)提供。件,

溫馨提示

  • 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)論