版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
中程在線(北京)科技有限公司內(nèi)部教程注意保密Android高級課程
AndroidNativeC語言教學
C的起源-1970年代﹐李查(D.Richie)及湯普士(K.Thompson)任職于美國貝爾實驗室(BellLabs)。湯普士正設(shè)計Unix操作系統(tǒng)﹐李查負責設(shè)計新語言來撰寫Unix程序。新語言繼承湯普士原設(shè)計的B語言﹐稱為C語言。數(shù)學函數(shù)(Function)觀念﹐被應(yīng)用到C語言中﹐成為C程序的基本組件。
例如sin()、cos()等。在C的編程時,可自行定義函數(shù),如:f(x)=x*x
就是一個函數(shù)﹐括號內(nèi)的x為參數(shù)。如果x值為5﹐f(5)=5*5=25﹔此時f(5)函數(shù)值是25。
C的基本結(jié)構(gòu)
1.前置處理器(Preprocessor):-前置處理器的任務(wù)是﹕在編譯(Compile)之前把原始程序先整合﹐再交給編譯程序(Compiler)處理。
C的特殊結(jié)構(gòu)2.定義宏(Macro):-人有正名(本名)﹐也有別名﹐通常別名較親切。程序內(nèi)之常數(shù)或變量也能有涵意深刻之別名。令程序更有人情味﹐更親切。有了別名﹐就可使用別名﹐亦可用本名。前置處理器(Preprocessor)將別名轉(zhuǎn)成正名﹐才交由編譯程序(Compiler)編譯之。
常數(shù)的別名(如PI)﹐通稱為「宏常數(shù)」﹔若別名中含有參數(shù)(Argument)﹐就類似一般函數(shù)﹐通稱為「宏函數(shù)」。
#defineTRUE1#defineFALSE0#defineNewLine'\n'chardigit(chark){
return((k>='0'&&k<='9')?TRUE:FALSE);
}
int
main(void)
{
charch;
while((ch=getchar())!=NewLine)
if(digit(ch))
printf("DIGIT\n");else
printf("NotDigit\n");
return0;}
例如:這程序含三個宏常數(shù)──TRUE、FALSE及NewLine。TRUE代表1﹐使得程序的思路更清晰。FALSE及NewLine
也有同樣效果。
前置處理器看到#define指示﹐就將TRUE還原為1﹐FALSE還原為0﹐且NewLine
還原為'\n'。處理后的結(jié)果:chardigit(chark)
{
return((k>='0'&&k<='9')?1:0);
}
int
main(void)
{
int
ch;while((ch=getchar())!='\n')
if(digit(ch))printf("DIGIT\n");else
printf("NotDigit\n");
return0;}
──────────────────────#definemax(x,y)((x)>(y)?(x):(y))#definemin(x,y)((x)<(y)?(x):(y))
#definesquare(x)((x)*(x))
#definecube(x)((x)*(x)*(x))#defineabs(x)((x)>0?-(x):(x))
#definerecip(x)((float)(x)=1.0/(float)(x))#defineodd(x)((x)&1?1:0)#defineeven(x)((x)&1?0:1)─────────────────────────────
寫C程序時﹐常用下述宏函數(shù)﹕
●max(x,y)拿兩數(shù)相比﹐挑出較大者?!駇in(x,y)則挑出較小值?!駍quare(x)求x的平方?!馽ube(x)求x的立方?!馻bs(x)求x的絕對值?!駌ecip(x)求x的倒數(shù)?!駉dd(x)判斷x是否為奇數(shù)?!馿ven(x)判斷x是否為偶數(shù)。隨時可引用上述宏﹐創(chuàng)造更多宏。3.取銷宏:
-#define用來定義宏常數(shù)和函數(shù)。#undef指示恰好跟#define相反﹐用來取銷已定義之宏常數(shù)或函數(shù)。
intAdd(intx){return(x+x);}
#define
Add(x)((x)+10)int
main(void){
intk=Add(8);
#undefAdd
inth=Add(8);
printf("k=%d,h=%d",k,h);
return0;}
例如:含入標頭檔(Header):
-寫程序時﹐若想用這心愛宏﹐有兩種方法﹕1.
把宏抄進C程序(*.c)中。2.把各宏歸成「宏文件」﹐讓程序含入之。這檔案通稱為「標頭檔」
(HeaderFile)﹐
/*Ex_macro.h*/
#defineTRUE1#defineFALSE0#defineCR'\r'#definePI3.1416#defineEOF(-1)#defineSign(x)((x)<0?FALSE:TRUE)
#defineArea(r)((r)*(r)*PI)#defineAND&defineREALfloat
例如:-此宏文件之個名字為﹕Ex_macro.h
-在C程序中﹐利用#include來含入標頭檔
/*Ex_macro.c*/#include<stdio.h>#include"Ex_macro.h"int
main(void){/*………*/}例如:#include是「含入」之意﹐其要求前置處理器并入標頭檔之內(nèi)容﹐擺于#include指示的位置上。-標頭文件的好處是﹕各程序(*.c)共享標頭文件內(nèi)之的宏。寫復(fù)雜程序時﹐就得熟練運用標頭檔了。可隨時修改標頭文件內(nèi)之宏﹐修改之后﹐再重新編譯各模塊(Module)即行了。
4.條件性定義:條件性定義(ConditionalDefinition)指示有﹕#ifdef
宏若已定義了此宏﹐就留下#ifdef與#endif
間的指令﹔否則刪去之。#ifndef
宏若未定義過此宏﹐就留下#ifndef
與
#endif間的指令﹔否則刪去之。#endif
說明#ifdef
及#ifndef
之范圍。#undef
宏#define的相反動作──解除定義。#else可構(gòu)成#ifdef~#else~#endif結(jié)構(gòu)或是
#ifndef~#else~#endif結(jié)構(gòu)。5.指針(Pointer):-指針(Pointer)就是某個變量的地址(Address)﹐也就是說,它用來指向該變量。-有人說C并不好學﹐何以致之呢﹖其來自于C程序中充滿著「指針」(Pointer)觀念﹐而許多人認為指標很難纏。其實指標觀念并不如想象中的麻煩﹐只是有點不習慣罷了。
指針與數(shù)組:指針能指向數(shù)組內(nèi)之任一元素。可藉指針來存取數(shù)組內(nèi)之元素。所以﹐除了傳統(tǒng)的數(shù)組存取方法之外﹐還可利用更有效率的指針處理方法。#include<stdio.h>int
main(void)
{
intdata[3];
int*px,*py;data[0]=5;
data[1]=28;data[2]=78;px=&data[0];py=&data[1];data[2]+=*px+(*py)++;printf("%d,%d,%d\n",data[0],data[1],data[2]);
return0;
}
例如:
px=&data[0]叫px指向元素data[0]。既然px指向data[0]﹐就可用*px
來代替data[0]﹐亦即可用*px
來存取data[0]之內(nèi)容。py=&data[1]令py指向data[1]元素﹐此時可用*py
代替data[1]﹐用*py
存取data[1]之內(nèi)容。
6.變量的儲存種類:在大家庭中﹐每人都有自己的財產(chǎn)﹐也有屬于家庭的公家財產(chǎn)。在C程序(猶如大家庭)中﹐每個函數(shù)有自己的變量﹐也有屬于整個程序的公家變量。私有財產(chǎn)屬于個人﹐別人無權(quán)使用﹔同樣地﹐私有變量屬于函數(shù)﹐別的函數(shù)無權(quán)存取之。
根據(jù)使用權(quán)限﹐變量可分為三類﹕自動(Automatic)變量隸屬于一個函數(shù)﹐別函數(shù)無權(quán)使用。2.外部靜態(tài)(ExternalStatic)變量
隸屬于一個原始程序文件(*.c)﹐該檔內(nèi)的各
函數(shù)公用﹐但別文件內(nèi)的函數(shù)無權(quán)使用。3.外部(External)變量
各函數(shù)公用。7.結(jié)構(gòu)(Struct):結(jié)構(gòu)能儲存相關(guān)但不同型態(tài)之數(shù)據(jù)。例如
structsmile{
charsna;
charsize;floatprice;};這說明了﹕smile結(jié)構(gòu)內(nèi)含3項數(shù)據(jù)──兩項字符數(shù)據(jù)﹐另一項浮點數(shù)數(shù)據(jù)。
8.動態(tài)內(nèi)存分配:malloc()及free()「動態(tài)」(Dynamic)的意思是﹕待程序執(zhí)行時(Run-Time)才告訴計算機共需要多少內(nèi)存空間﹐計算機依照需要立即分配空間﹐裨儲存數(shù)據(jù)。這種空間﹐又稱為「動態(tài)數(shù)組」(DynamicArray)。傳統(tǒng)數(shù)組的優(yōu)點是﹕簡單易用﹐其弱點是﹕缺乏彈性﹐動態(tài)內(nèi)存分配的方法恰補足此項弱點。
。
malloc()和free()是最常用的動態(tài)內(nèi)存分配函數(shù)。如果在執(zhí)行時需要空間來儲存數(shù)據(jù)﹐宜使用malloc()函數(shù)。例如﹕ptr=malloc(100);
這個指令要求計算機分配100bytes空間。malloc()函數(shù)會傳回該空間的地址﹐且存入ptr
內(nèi)﹐于是ptr
指向該空間。就可藉ptr
指標來存取此空間的數(shù)據(jù)了。
9.列舉型態(tài):-列舉型態(tài)(EnumeratedDataType)是一堆常數(shù)的集合﹐這些常數(shù)稱為「列舉常數(shù)」(EnumeratedConstants)。例如﹕樸克牌有club、diamond、heart及spade四種牌﹐任意抽出一張﹐必定是上述4者之1。此時﹐可定義列舉型態(tài)表達上述4種數(shù)據(jù)﹕
enum
樸克牌
{club,diamond,heart,spade};enum
week_day
{
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度洛陽租賃房屋租賃合同終止條件約定4篇
- 2025年北師大新版六年級語文上冊階段測試試卷含答案
- 藥物應(yīng)用前景分析-洞察分析
- 2025年外研版八年級地理下冊階段測試試卷含答案
- 二零二五版家政服務(wù)與雇主及第三方監(jiān)管機構(gòu)三方合作合同
- 物聯(lián)網(wǎng)實驗室數(shù)據(jù)安全與隱私保護-洞察分析
- 2025年外研版三年級起點選修4化學下冊月考試卷含答案
- 2025年滬科版七年級地理下冊階段測試試卷
- 2025年滬科版八年級地理下冊階段測試試卷
- 2025年人教版PEP七年級地理下冊月考試卷
- 拘留所教育課件02
- 沖壓生產(chǎn)的品質(zhì)保障
- 《腎臟的結(jié)構(gòu)和功能》課件
- 2023年湖南聯(lián)通校園招聘筆試題庫及答案解析
- 上海市徐匯區(qū)、金山區(qū)、松江區(qū)2023屆高一上數(shù)學期末統(tǒng)考試題含解析
- 護士事業(yè)單位工作人員年度考核登記表
- 天津市新版就業(yè)、勞動合同登記名冊
- 產(chǎn)科操作技術(shù)規(guī)范范本
- 人教版八年級上冊地理全冊單元測試卷(含期中期末試卷及答案)
- 各種焊工證件比較和釋義
- 感染性疾病標志物及快速診斷課件(PPT 134頁)
評論
0/150
提交評論