高級(jí)05-JNI接口-結(jié)合Java與C本地代碼_第1頁(yè)
高級(jí)05-JNI接口-結(jié)合Java與C本地代碼_第2頁(yè)
高級(jí)05-JNI接口-結(jié)合Java與C本地代碼_第3頁(yè)
高級(jí)05-JNI接口-結(jié)合Java與C本地代碼_第4頁(yè)
高級(jí)05-JNI接口-結(jié)合Java與C本地代碼_第5頁(yè)
已閱讀5頁(yè),還剩30頁(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)介

中程在線(北京)科技有限公司內(nèi)部教程注意保密Android高級(jí)課程

AndroidNativeC語(yǔ)言教學(xué)

C的起源-1970年代﹐李查(D.Richie)及湯普士(K.Thompson)任職于美國(guó)貝爾實(shí)驗(yàn)室(BellLabs)。湯普士正設(shè)計(jì)Unix操作系統(tǒng)﹐李查負(fù)責(zé)設(shè)計(jì)新語(yǔ)言來(lái)撰寫(xiě)Unix程序。新語(yǔ)言繼承湯普士原設(shè)計(jì)的B語(yǔ)言﹐稱(chēng)為C語(yǔ)言。數(shù)學(xué)函數(shù)(Function)觀念﹐被應(yīng)用到C語(yǔ)言中﹐成為C程序的基本組件。

例如sin()、cos()等。在C的編程時(shí),可自行定義函數(shù),如:f(x)=x*x

就是一個(gè)函數(shù)﹐括號(hào)內(nèi)的x為參數(shù)。如果x值為5﹐f(5)=5*5=25﹔此時(shí)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)﹐通稱(chēng)為「宏常數(shù)」﹔若別名中含有參數(shù)(Argument)﹐就類(lèi)似一般函數(shù)﹐通稱(chēng)為「宏函數(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;}

例如:這程序含三個(gè)宏常數(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)─────────────────────────────

寫(xiě)C程序時(shí)﹐常用下述宏函數(shù)﹕

●max(x,y)拿兩數(shù)相比﹐挑出較大者?!駇in(x,y)則挑出較小值?!駍quare(x)求x的平方。●cube(x)求x的立方?!馻bs(x)求x的絕對(duì)值?!駌ecip(x)求x的倒數(shù)。●odd(x)判斷x是否為奇數(shù)。●even(x)判斷x是否為偶數(shù)。隨時(shí)可引用上述宏﹐創(chuàng)造更多宏。3.取銷(xiāo)宏:

-#define用來(lái)定義宏常數(shù)和函數(shù)。#undef指示恰好跟#define相反﹐用來(lái)取銷(xiāo)已定義之宏常數(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;}

例如:含入標(biāo)頭檔(Header):

-寫(xiě)程序時(shí)﹐若想用這心愛(ài)宏﹐有兩種方法﹕1.

把宏抄進(jìn)C程序(*.c)中。2.把各宏歸成「宏文件」﹐讓程序含入之。這檔案通稱(chēng)為「標(biāo)頭檔」

(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

例如:-此宏文件之個(gè)名字為﹕Ex_macro.h

-在C程序中﹐利用#include來(lái)含入標(biāo)頭檔

/*Ex_macro.c*/#include<stdio.h>#include"Ex_macro.h"int

main(void){/*………*/}例如:#include是「含入」之意﹐其要求前置處理器并入標(biāo)頭檔之內(nèi)容﹐擺于#include指示的位置上。-標(biāo)頭文件的好處是﹕各程序(*.c)共享標(biāo)頭文件內(nèi)之的宏。寫(xiě)復(fù)雜程序時(shí)﹐就得熟練運(yùn)用標(biāo)頭檔了??呻S時(shí)修改標(biāo)頭文件內(nèi)之宏﹐修改之后﹐再重新編譯各模塊(Module)即行了。

4.條件性定義:條件性定義(ConditionalDefinition)指示有﹕#ifdef

宏若已定義了此宏﹐就留下#ifdef與#endif

間的指令﹔否則刪去之。#ifndef

宏若未定義過(guò)此宏﹐就留下#ifndef

#endif間的指令﹔否則刪去之。#endif

說(shuō)明#ifdef

及#ifndef

之范圍。#undef

宏#define的相反動(dòng)作──解除定義。#else可構(gòu)成#ifdef~#else~#endif結(jié)構(gòu)或是

#ifndef~#else~#endif結(jié)構(gòu)。5.指針(Pointer):-指針(Pointer)就是某個(gè)變量的地址(Address)﹐也就是說(shuō),它用來(lái)指向該變量。-有人說(shuō)C并不好學(xué)﹐何以致之呢﹖其來(lái)自于C程序中充滿著「指針」(Pointer)觀念﹐而許多人認(rèn)為指標(biāo)很難纏。其實(shí)指標(biāo)觀念并不如想象中的麻煩﹐只是有點(diǎn)不習(xí)慣罷了。

指針與數(shù)組:指針能指向數(shù)組內(nèi)之任一元素。可藉指針來(lá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

來(lái)代替data[0]﹐亦即可用*px

來(lái)存取data[0]之內(nèi)容。py=&data[1]令py指向data[1]元素﹐此時(shí)可用*py

代替data[1]﹐用*py

存取data[1]之內(nèi)容。

6.變量的儲(chǔ)存種類(lèi):在大家庭中﹐每人都有自己的財(cái)產(chǎn)﹐也有屬于家庭的公家財(cái)產(chǎn)。在C程序(猶如大家庭)中﹐每個(gè)函數(shù)有自己的變量﹐也有屬于整個(gè)程序的公家變量。私有財(cái)產(chǎn)屬于個(gè)人﹐別人無(wú)權(quán)使用﹔同樣地﹐私有變量屬于函數(shù)﹐別的函數(shù)無(wú)權(quán)存取之。

根據(jù)使用權(quán)限﹐變量可分為三類(lèi)﹕自動(dòng)(Automatic)變量隸屬于一個(gè)函數(shù)﹐別函數(shù)無(wú)權(quán)使用。2.外部靜態(tài)(ExternalStatic)變量

隸屬于一個(gè)原始程序文件(*.c)﹐該檔內(nèi)的各

函數(shù)公用﹐但別文件內(nèi)的函數(shù)無(wú)權(quán)使用。3.外部(External)變量

各函數(shù)公用。7.結(jié)構(gòu)(Struct):結(jié)構(gòu)能儲(chǔ)存相關(guān)但不同型態(tài)之?dāng)?shù)據(jù)。例如

structsmile{

charsna;

charsize;floatprice;};這說(shuō)明了﹕smile結(jié)構(gòu)內(nèi)含3項(xiàng)數(shù)據(jù)──兩項(xiàng)字符數(shù)據(jù)﹐另一項(xiàng)浮點(diǎn)數(shù)數(shù)據(jù)。

8.動(dòng)態(tài)內(nèi)存分配:malloc()及free()「動(dòng)態(tài)」(Dynamic)的意思是﹕待程序執(zhí)行時(shí)(Run-Time)才告訴計(jì)算機(jī)共需要多少內(nèi)存空間﹐計(jì)算機(jī)依照需要立即分配空間﹐裨儲(chǔ)存數(shù)據(jù)。這種空間﹐又稱(chēng)為「動(dòng)態(tài)數(shù)組」(DynamicArray)。傳統(tǒng)數(shù)組的優(yōu)點(diǎn)是﹕簡(jiǎn)單易用﹐其弱點(diǎn)是﹕缺乏彈性﹐動(dòng)態(tài)內(nèi)存分配的方法恰補(bǔ)足此項(xiàng)弱點(diǎn)。

。

malloc()和free()是最常用的動(dòng)態(tài)內(nèi)存分配函數(shù)。如果在執(zhí)行時(shí)需要空間來(lái)儲(chǔ)存數(shù)據(jù)﹐宜使用malloc()函數(shù)。例如﹕ptr=malloc(100);

這個(gè)指令要求計(jì)算機(jī)分配100bytes空間。malloc()函數(shù)會(huì)傳回該空間的地址﹐且存入ptr

內(nèi)﹐于是ptr

指向該空間。就可藉ptr

指標(biāo)來(lái)存取此空間的數(shù)據(jù)了。

9.列舉型態(tài):-列舉型態(tài)(EnumeratedDataType)是一堆常數(shù)的集合﹐這些常數(shù)稱(chēng)為「列舉常數(shù)」(EnumeratedConstants)。例如﹕樸克牌有club、diamond、heart及spade四種牌﹐任意抽出一張﹐必定是上述4者之1。此時(shí)﹐可定義列舉型態(tài)表達(dá)上述4種數(shù)據(jù)﹕

enum

樸克牌

{club,diamond,heart,spade};enum

week_day

{

monday,

tuesday,

wednesday,

thursday,

friday,

saturday,

溫馨提示

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