高級05_JNI接口_結(jié)合Java與C本地代碼_第1頁
高級05_JNI接口_結(jié)合Java與C本地代碼_第2頁
高級05_JNI接口_結(jié)合Java與C本地代碼_第3頁
高級05_JNI接口_結(jié)合Java與C本地代碼_第4頁
高級05_JNI接口_結(jié)合Java與C本地代碼_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中程在線(北京)科技有限公司內(nèi)部教程注意保密Android高級課程高級課程Android Native C 語言教學(xué)語言教學(xué) C的起源的起源- 1970年代李查(D. Richie) 及湯普士(K. Thompson) 任職于美國貝爾實驗室(Bell Labs) 。湯普士正設(shè)計Unix操作系統(tǒng)李查負(fù)責(zé)設(shè)計新語言來撰寫Unix程序。新語言繼承湯普士原設(shè)計的B 語言稱為C 語言。-數(shù)學(xué)函數(shù)(Function)觀念被應(yīng)用到C語言中成為C程序的基本組件。例如sin()、cos()等。在C的編程時,可自行定義函數(shù),如:f(x) = x * x就是一個函數(shù)括號內(nèi)的x 為參數(shù)。如果x值為5 f(5) = 5

2、 * 5 = 25此時f(5)函數(shù)值是25。 C的基本結(jié)構(gòu)的基本結(jié)構(gòu) 1. 前置處理器前置處理器(Preprocessor):- 前置處理器的任務(wù)是在編譯(Compile) 之前把原始程序先整合再交給編譯程序(Compiler)處理。 C的特殊結(jié)構(gòu)的特殊結(jié)構(gòu)2.定義宏定義宏(Macro):-人有正名(本名)也有別名通常別名較親切。程序內(nèi)之常數(shù)或變量也能有涵意深刻之別名。令程序更有人情味更親切。有了別名就可使用別名亦可用本名。前置處理器(Preprocessor)將別名轉(zhuǎn)成正名才交由編譯程序(Compiler)編譯之。 常數(shù)的別名(如PI)通稱為宏常數(shù)若別名中含有參數(shù)(Argument)就類似一

3、般函數(shù)通稱為宏函數(shù)。 #define TRUE 1#define FALSE 0#define NewLine n char digit( char k ) return (k =0 & k =0 & k (y) ? (x) : (y) #define min(x, y) (x) 0 ? -(x) : (x) #define recip(x) (float)(x) = 1.0 / (float)(x) #define odd(x) (x) & 1 ? 1 : 0) #define even(x) (x) & 1 ? 0 : 1) 寫C 程序時常用下述宏函數(shù) ma

4、x(x,y) 拿兩數(shù)相比挑出較大者。 min(x,y) 則挑出較小值。 square(x)求x 的平方。 cube(x) 求x 的立方。 abs(x) 求x 的絕對值。 recip(x) 求x 的倒數(shù)。 odd(x) 判斷x 是否為奇數(shù)。 even(x) 判斷x 是否為偶數(shù)。隨時可引用上述宏創(chuàng)造更多宏。3. 取銷宏:取銷宏: - #define 用來定義宏常數(shù)和函數(shù)。#undef指示恰好跟#define 相反用來取銷已定義之宏常數(shù)或函數(shù)。 int Add( int x ) return (x+x); #define Add(x) (x)+10)int main(void) int k = Ad

5、d(8); #undef Add int h = Add(8); printf( k=%d, h=%d, k, h ); return 0; 例如:含入標(biāo)頭檔含入標(biāo)頭檔(Header): -寫程序時若想用這心愛宏有兩種方法1. 把宏抄進(jìn)把宏抄進(jìn)C 程序程序(*.c) 中中。2. 把各宏歸成宏文件把各宏歸成宏文件讓程序含入之讓程序含入之。這檔案通稱為標(biāo)頭檔 (Header File) /* Ex_macro.h */ #define TRUE 1 #define FALSE 0 #define CR r #define PI 3.1416 #define EOF (-1) #define Sig

6、n(x) (x) 0 ? FALSE: TRUE) #define Area(r) (r) * (r) * PI) #define AND & #define REAL float 例如:- 此宏文件之個名字為Ex_macro . h - 在C程序中利用 #include來含入標(biāo)頭檔 /* Ex_macro.c */#include #include Ex_macro.hint main(void) /* */ 例如:#include是含入之意其要求前置處理器并入標(biāo)頭檔之內(nèi)容擺于 #include 指示的位置上。- 標(biāo)頭文件的好處是各程序(*.c) 共享標(biāo)頭文件內(nèi)之的宏。寫復(fù)雜程序時就

7、得熟練運用標(biāo)頭檔了??呻S時修改標(biāo)頭文件內(nèi)之宏修改之后再重新編譯各模塊(Module)即行了。 4. 條件性定義:條件性定義:條件性定義(Conditional Definition)指示有#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.

8、 指針指針(Pointer):- 指針(Pointer)就是某個變量的地址(Address)也就是說,它用來指向該變量。- 有人說C 并不好學(xué)何以致之呢其來自于C 程序中充滿著指針(Pointer) 觀念而許多人認(rèn)為指標(biāo)很難纏。其實指標(biāo)觀念并不如想象中的麻煩只是有點不習(xí)慣罷了。 指針與數(shù)組指針與數(shù)組:-指針能指向數(shù)組內(nèi)之任一元素??山逯羔榿泶嫒?shù)組內(nèi)之元素。-所以除了傳統(tǒng)的數(shù)組存取方法之外還可利用更有效率的指針處理方法。#include int main(void) int data3; int *px, *py; data0 = 5; data1 = 28; data2 = 78; px =

9、 &data0; py = &data1; data2 += *px + (*py)+; printf(%d, %d, %dn, data0, data1, data2); return 0; 例如: px = &data0叫px指向元素data0。既然px指向data0就可用*px 來代替data0亦即可用*px 來存取data0 之內(nèi)容。py = &data1令py指向data1 元素此時可用*py 代替data1用*py 存取data1 之內(nèi)容。 6. 變量的儲存種類:變量的儲存種類:-在大家庭中每人都有自己的財產(chǎn)也有屬于家庭的公家財產(chǎn)。在C 程序(猶如大

10、家庭)中每個函數(shù)有自己的變量也有屬于整個程序的公家變量。私有財產(chǎn)屬于個人別人無權(quán)使用同樣地私有變量屬于函數(shù)別的函數(shù)無權(quán)存取之。 根據(jù)使用權(quán)限變量可分為三類 自動(Automatic) 變量 隸屬于一個函數(shù)別函數(shù)無權(quán)使用。2. 外部靜態(tài)(External Static) 變量 隸屬于一個原始程序文件(*.c)該檔內(nèi)的各 函數(shù)公用但別文件內(nèi)的函數(shù)無權(quán)使用。3. 外部(External)變量 各函數(shù)公用。7. 結(jié)構(gòu)結(jié)構(gòu)(Struct):-結(jié)構(gòu)能儲存相關(guān)但不同型態(tài)之?dāng)?shù)據(jù)。例如 struct smile char sna; char size; float price; ;這說明了smile 結(jié)構(gòu)內(nèi)含3

11、 項數(shù)據(jù)兩項字符數(shù)據(jù)另一項浮點數(shù)數(shù)據(jù)。 8. 動態(tài)內(nèi)存分配:動態(tài)內(nèi)存分配:malloc()及及 free()- 動態(tài)(Dynamic) 的意思是待程序執(zhí)行時(Run-Time)才告訴計算機共需要多少內(nèi)存空間計算機依照需要立即分配空間裨儲存數(shù)據(jù)。這種空間又稱為動態(tài)數(shù)組(Dynamic Array)。傳統(tǒng)數(shù)組的優(yōu)點是簡單易用其弱點是缺乏彈性動態(tài)內(nèi)存分配的方法恰補足此項弱點。 。 - malloc()和free()是最常用的動態(tài)內(nèi)存分配函數(shù)。如果在執(zhí)行時需要空間來儲存數(shù)據(jù)宜使用malloc()函數(shù)。- 例如 ptr = malloc(100); 這個指令要求計算機分配100 bytes 空間。mal

12、loc()函數(shù)會傳回該空間的地址且存入ptr 內(nèi)于是ptr 指向該空間。就可藉ptr 指標(biāo)來存取此空間的數(shù)據(jù)了。 9.列舉型態(tài):列舉型態(tài):-列舉型態(tài)(Enumerated Data Type)是一堆常數(shù)的集合這些常數(shù)稱為列舉常數(shù)(Enumerated Constants)。例如樸克牌有club、diamond 、heart 及spade 四種牌任意抽出一張必定是上述4 者之1。此時可定義列舉型態(tài)表達(dá)上述4 種數(shù)據(jù) enum 樸克牌 club, diamond, heart, spade ;enum week_day monday, tuesday, wednesday, thursday, friday, saturday, sunday ; 例如- enum week_day 列舉型態(tài)內(nèi)含monday、tuesday 、sunday共7 個常數(shù)計算機分別以0 、1 、6 代表這7 個列舉常數(shù)。列舉型態(tài)把相關(guān)常數(shù)組成一個集合計算機把列舉常數(shù)逐一編號。程序里可盡情地使用列舉常數(shù)名稱(如monday)裨增加程序的可讀性。 。 因之 enum week_day 列舉型態(tài) 相當(dāng)于: #define monday 0 #define tuesday 1 #define wednesdy 2 . #define sunday 6 10. typedef 指指示示:

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論