android JNI 开发技术 (C/C++基础篇)
2018-01-10 09:56
211 查看
android JNI 开发技术的使用,FrameWork层能够很好的和底层硬件结合,而硬件的操作基本使用C语言程序。所以在android开发的过程中,了解基础C语言,是很重要的一环。
C语言基础知识整理
一:我的第一个HelloWorld!
二:C语言基础知识
三:C语言中的指针
四:C语言中的数组
五:C语言中的多级指针
六:C静态分配内存和动态分配内存
七:动态分配数组内存地址
}
八:C函数指针
九:C联合体(union)
十:C枚举(enum)
十一:typeof 别名 当数据类型很长,可以使用这个方式。自定义的类很长,可以使用
十二:结构体
十三:结构体指针
C语言基础知识整理
一:我的第一个HelloWorld!
//c++的头文件 #include <stdio.h> //C++中主要的类库 #include <stdlib.h> //相当于java中的 public static void main(String strs[]){} main(){ //函数开始 printf("Hello: wangxiaobo\n wang");//输出打印函数 system("services.msc"); system("mspaint"); /* 之前错误的理解为:C语言不需要进行编译,其实C也是需要编译执行 1:在dos 环境下,完全在c 语言中调用java代码中的方法 step1:将自己编译好的java代码路径在window环境变量中的 CLASSPATH 中配置 setp2: 直接在C语言中进行 调用 */ system("java Test"); system("pause");//doc 执行命令 控制台 console 停留 } SUMMARY:使用简单的C语言命令,可以操作相关系统的应用。
二:C语言基础知识
C基本数据类型 类型长度 C语言中对应的占位符 int 4 %d double 8 %lf float 4 %f long 4 %ld short 2 %sd char 1 %c void signed 4 unsigned 4 C中没有String,boolean类型,但是在c中对string占位符为 %s C中输出内存地址的占位符 %#x C中输出16进制的占位符 %o sizeof(int)函数:返回数据类型的长度 对于小数位精度保留 %.2lf 表示对double类型的小数位保留两位小数,默认四舍五入
三:C语言中的指针
指针:存储内存地址。但是不要误以为指针本身不占有内存空间,实际上指针本身也是占有内存的 不过它的存储值为内存 int* pointer; *pointer :表示获取指针对应内存地址存储的值 指针和指针变量的关系与区别 可变 具体的值
四:C语言中的数组
要点:数组是一块连续的内存空间 数组的内存地址与数组中首个元素的内存地址相同 对于数组而言: char cArray[] = {'H','E','L','L','O'}; printf("取出相应的值:\n"); printf("cArray[0]==%c\n",cArray[0]); //数组取值 printf("查看cArray相应的内存地址:\n"); printf("&cArray[0]==%#x\n",&cArray[0]);//数组取址 //对于数组中取值与取址的新方法 printf("查看cArray相应的内存地址:\n"); int j; for(j=0;j<5;j++){ printf("cArray+%d==%#x\n",j,cArray+j); } printf("查看cArray相应的值:\n"); for(j=0;j<5;j++){ printf("cArray+%d==%c\n",j,*(cArray+j)); }
五:C语言中的多级指针
int* p1; int** p2; int*** p3; 这种情况下的指针操作,说白了,也就是指针的地址间的相互转化,调用 main(){ //定义一个变量 int i = 100; printf("&i==%#x\n",&i); //address1指向地址为i的地址 int* address1 = &i; printf("address1==%#x\n",address1);//地址 printf("&address1==%#x\n",&address1);// 对应地址的值的地址 //二级指针,地址的地址 int** address2 = &address1; printf("address2==%#x\n",address2); printf("&address2==%#x\n",&address2); //三级指针 int*** address3 = &address2; printf("address3==%#x\n",address3); printf("&address3==%#x\n",&address3); int**** address4 = &address3; printf("address4==%#x\n",address4); printf("&address4==%#x\n",&address4); //指针取值 printf("****address4==%d\n",****address4); system("pause"); }
六:C静态分配内存和动态分配内存
静态分配内存:存在系统会在不定时的清理内存 动态分配内存:需要使用动态分配内存地址函数 malloc(int) 返回一个内存地址 /*静态分配内存地址*/ void staticMemory(int** param){ int i = 100; //指针前面+* 表示 指针对应内存地址的值 *param = &i; } /*动态分配内存地址*/ void dynamicMemory(int** params){ int i = 100; /*指针指的是内存地址,所以它的长度为4*/ int* pointer; /*动态分配地址的主要方法 malloc()*/ pointer = (int*)malloc(sizeof(int)); //4,该方法返回的是一块内存地址值,那么使用指针来接收 *pointer = i; *params = pointer; } main(){ /*创建指针age 此时他本身是占有内存空间的*/ int* age; /*调用函数,进行地址分配*/ staticMemory(&age); printf("*age==%d\n",*age); //静态分配内存,在不确定的时间内系统会自动回收,这个如何控制,不知道 printf("*age==%d\n",*age); printf("*age==%d\n",*age); dynamicMemory(&age); printf("*age==%d\n",*age); printf("*age==%d\n",*age); printf("*age==%d\n",*age); system("pause"); }
七:动态分配数组内存地址
应用realloc(*_,int);方法,来重新分配内存 main(){ //输入数组的长度 printf("Please input Array length:\n"); int length; scanf("%d",&length); //提示 printf("The Array length is :%d\n",length); int* array = (int*)malloc(length*sizeof(int)); int i; for(i = 0;i<length;i++){ //提示用户 printf("Please input Array[%d] value\n",i); scanf("%d",array+i);//对对应的内存地址赋值 } printf("---------------------------------I want to realloc memory:--------------------------\n"); printf("please input the Array new length:\n"); int newLength; scanf("%d",&newLength); printf("The new Array length is : %d\n",newLength); //重新分配内存空间的函数 realloc() array = (int*)realloc(array,(length+newLength)*sizeof(int)); for(i = length;i<length+newLength;i++){ //提示用户 printf("Please input Array[%d] value\n",i); scanf("%d",array+i);//对对应的内存地址赋值 } //打印出相应的数据 for(i=0;i<length+newLength;i++){ printf("Array[%d]==%d\n",i,*(array+i)); } system("pause");
}
八:C函数指针
/*定义一个小函数*/ int add(int a,int b){ return a+b; } main(){ //定义函数指针,没有方法体,括号中有*号 int (*func1)(int a,int b); func1 = add; int resule = func1(1,2); printf("resule==%d\n",resule); system("pause"); }
九:C联合体(union)
/* 联合体 Unition 所有的字段均使用同一块内存空间,即长度为4 各个类型容易转化 */ union Size{ int small;//4 int large;//4 int middle;//4 }; main(){ printf("union Size == %d\n",sizeof(union Size)); /* union Size == 4 请按任意键继续. . . 原因:所有的字段均使用同一块内存空间,即长度为4 */ union Size s; s.large=10; s.middle = 5; s.small = 1; printf("Size.large==%d\n",s.large); printf("Size.middle==%d\n",s.middle); printf("Size.small==%d\n",s.small); //因为其联合体公用统一内存空间,所以修改值之后,对其中的值进行修改,其余的获得的值同样被修改 system("pause"); }
十:C枚举(enum)
/* 枚举默认的首元素是 0 */ /*enum 函数:默认从0开始,递增*/ enum week{ Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday } /*当将Sunday=1,的时候,获取到的Saturday的值为7*/ main(){ //使用enum,必须先声明 enum week weeks = Sunday; printf("weeks==%d\n",weeks); system("pause"); }
十一:typeof 别名 当数据类型很长,可以使用这个方式。自定义的类很长,可以使用
十二:结构体
问题:C中的结构体的长度为 12 ,原因百度可查 /* 定义结构体 这样的使用很类似于java中的POJO类 */ struct student{ int age;//4 float score;//4 char sex;//1 }; main(){ //使用结构体 struct student stu = {18,98.9,'w'}; printf("stu.age==%d\n",stu.age); printf("struct student length == %d\n",sizeof(struct student)); system("pause"); }
十三:结构体指针
/* 定义结构体 这样的使用很类似于java中的POJO类 */ struct student{ int age;//4 float score;//4 char sex;//1 }; main(){ //使用结构体 struct student stu = {18,98.9,'w'}; struct student* stuPoint = &stu; /*等价*/ printf("(*stuPoint).age == %d\n",(*stuPoint).age); printf("(*stuPoint).score == %.1f\n",stuPoint->score); /*重新赋值*/ stuPoint->age = 20; printf("(*stuPoint).age == %d\n",(*stuPoint).age); system("pause"); }
相关文章推荐
- Ubuntu Feisty 下开发 JNI 应用步骤 (Java调用C/C++的技术)
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
- 利用JNI技术在Android中调用C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- [转][android][利用JNI技术在Android中调用、调试C++代码]
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android开发中使用NDK在Eclipse中实现JNI技术
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- 利用JNI技术在Android中调用C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- android JNI C++开发时调试输出信息
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数