Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
2016-04-23 13:15
826 查看
Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了一.多级指针
指针的概念我们在前面也讲了许多,也提到了多级指针的概念,那具体我们怎么去操作呢#include <stdio.h> #include <stdlib.h> main(){ int i = 3; //一级 int* p = &i; //二级,保存一级指针 int** w = &p; //三级 保存二级指针 int*** e = &w; printf("%d\n",*(*w)); printf("%d\n",***e); //让窗口停留 int age ; scanf("%d",&age); }
其实就是保存多级的指针
二.结构体
我们android中常用的实体类在C中就叫结构体,那具体怎么去使用呢,要知道C是没有new的#include <stdio.h> #include <stdlib.h> struct student{ int age; char sex; }; main(){ //定义结构体 struct student stu = {20,170,'g'}; printf("%d\n",stu.age); printf("%d\n",sizeof(stu)); //让窗口停留 int age ; scanf("%d",&age); }
大家都有JAVA基础,看这些应该是没有压力的,我们不会特别详细的赘述,那样也毫无意义,我们能看懂代码就差不多了
这里打印的长度也是因为有两个int的关系,所以是8
结构体函数指针
我们在结构体中写个函数,试试什么效果?我们会发现不行,原因是因为结构体中不能定义函数,但是我们却需要这样做,C也给出了解决办法,结构体虽然不能定义函数但是可以定义函数指针
#include <stdio.h> #include <stdlib.h> void study(){ printf("结构体函数\n"); } struct student{ int age; char sex; void (*studentp)(); }; main(){ //定义结构体 struct student stu = {20,170,'g', study }; // printf("%d\n",stu.age); // printf("%d\n",sizeof(stu)); stu.studentp(); //让窗口停留 int age ; scanf("%d",&age); }
这样我们就可以调用了,不过开发中,我们一般也不这样写,我们这样写
struct student* stup = &stu; (*stup).study(); //引用这个指针的属性 stup->study();
三.联合体
其实就是一个类型集合一样,我们看‘#include <stdio.h> #include <stdlib.h> main(){ //定义联合体 union{int i ; short j ;char k}un; //他跟结构体的用法类似 un.i = 30; printf("%d\n",un.i); //打印长度 printf("%d\n",sizeof(un)); //让窗口停留 int age ; scanf("%d",&age); }
打印的结果
这里,数据是30没错,这个4是什么?联合体的长度是由最长的决定的,这就是答案了,但是,这就是联合体?NO。我们继续看
#include <stdio.h> #include <stdlib.h> main(){ //定义联合体 union{int i ; short j ;char k}un; //他跟结构体的用法类似 un.i = 30; printf("%d\n",un.i); un.j = 20; printf("%d\n",un.i); //打印长度 printf("%d\n",sizeof(un)); //让窗口停留 int age ; scanf("%d",&age); }
我们看结果
i = 20了,那是因为联合体每次只能存放一个数据,有值的话就替换
四.枚举
语法都有点类似,JAVA有枚举,C也有,而且都是同样的作用,你JAVA会了,C也就会了,我们来稍微概括一下就可以了#include <stdio.h> #include <stdlib.h> enum WeekDay { Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday }; int main(void) { //int day; enum WeekDay day = Sunday; printf("%d\n",day); system("pause"); return 0; }
我们打印出来是6,从0开始的
五.自定义类型
我们C中没有布尔,其实可以自定义的#include <stdio.h> #include <stdlib.h> //自定义类型 typedef int hello; main(){ hello i = 3; printf("%d\n",i); //让窗口停留 int age ; scanf("%d",&age); }
这个例子完全就是定义int,我们下篇就会讲到,我们的NDK开发,我们这里就不讲的那么详细,我们说NDK的时候尽量详细点
这篇先到这里,C的基本东东我们了解一下就可以了,下节课我们就回到我们的android来
相关文章推荐
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
- C++第4次作业
- [C++]类型转换
- c/c++优化结构控制
- C++实验4-项目3:乘法口诀表
- C++输入输出流
- c++11 auto
- c++栈类,以数组为存储结构。
- [C++]Operation on Relations
- C++ for循环跳过某一项求和
- freopen-C/C++方便的文件输入输出
- C/C++学习笔记(2)--函数模板template<typename T>,类模板详解(1)
- [C++]Stack with Template
- C++ 效率
- c语言.野指针
- C++ string 常用函数/方法
- JAVA使用JNI调用C++动态链接库
- S3C2440之UART0
- VC++深入详解第一章代码
- Notepad++插件:文件目录,自动补全,显示类,命令行