Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
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语言基础(19)-结构体,联合体,枚举和typedef
一.结构体 1.1 结构体struct定义及初始化 #include <stdio.h> // 这个头文件在系统目录下 #include <stdlib.h> // 使用了sy ...
- Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:函数指针 1.函数指针顾名思义就是定义一个指针变量指向一个函数,和一级指 ...
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- C语言第九讲,结构体
C语言第九讲,结构体 一丶结构体的定义 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种 ...
- 【AT91SAM3S】SAM3S-EK Demo工程中,LCD驱动程序的加载(函数指针结构体)
为了调试LCD,在英倍特的板子上烧Atmel的sam3s-ek_demo_1.4_source示例代码.LCD显示正常了,却找不到LCD的驱动究竟在哪. 花了好久,追踪到了这个执行过程. 进入main ...
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- C语言笔记之结构体
结构的本质是C语言的一种数据抽象,通俗的说,是基本数据类型的重组. 为什么要重组呢?由于基本数据类型不够用了.为什么不够用了呢?由于须要的信息类型太多了. 这是一个非常大的话题.信息本来是没有什么类型 ...
- Go语言基础之结构体
Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...
随机推荐
- dynamic initializer和全局变量
"慎用全局变量,包括全局静态变量" 是众所周知的原则,因为全局变量除了会增加程序的维护成本. 如果全局变量是个复杂的对象,并且还使用其他的全局变量,那情况就变得复杂的多.因为全局变 ...
- Dynamics CRM2016 Update or Create parentcustomerid in Contact using web api
联系人实体中有个特殊的字段parentcustomerid 在通过web api创建或更新记录时,如果在给这个字段赋值时当做查找字段对待的话,那你就会遇到问题了,报错信息如下 正确的赋值方式如下
- github pages + Hexo + 域名绑定搭建个人博客增强版
概述 前面我们用github pages + Hexo 搭建了一个简单版的个人博客系统,但是里面的内容单调,很多功能不够完善,所以我们需要对yelle 的主题进行优化和完善.基本搭建请访问:http: ...
- Dynamics CRM 通过Odata创建及更新记录各类型字段的赋值方式
CRM中通过Odata方式去创建或者更新记录时,各种类型的字段的赋值方式各不相同,这里转载一篇博文很详细的列出了各类型字段赋值方式,以供后期如有遗忘再次查询使用. http://luoyong0201 ...
- [django]urls.py 中重定向
Django 1.5 有时候需要对一个链接直接重定向,比如首页啥的重定向到一个内容页等等,在views.py 中可以设定,如果没有参数啥的在urls.py 中设定更加方面 from django.vi ...
- 使用Apache的ab进行压力测试
概述 ab是apache自带的压力测试工具,当安装完apache的时候,就可以在bin下面找到ab然后进行apache 负载压力测试. 后台测试开发中,常用的压力测试服务,php一般选择xampp,下 ...
- activty栈管理
题外话:我们有时在开发中,通常会有如下的需求:屏幕1-->屏幕2-->屏幕3-->屏幕4...,现在需要直接从屏幕4-->屏幕1,很多人会想到对activity进行管理得到对应 ...
- HDFS的写数据过程分析
HDFS的写数据过程分析 我们通过FileSystem类可以操控HDFS, 那我们就从这里开始分析写数据到HDFS的过程. 在我们向 HDFS 写文件的时候,调用的是 FileSystem.creat ...
- 如何将dtb反编译成dts
点击打开链接 由于device tree会将一个node的信息分布在各个文件里,查看起来很不方便,比如如下例子,ldb在三个文件中都有配置: imx6qdl-sabresd.dtsi: [plain] ...
- Java基本语法-----java变量
1.变量的概述 用于存储可变数据的容器. 2.变量存在的意义 计算机主要用于处理生活中的数据,由于生活中存在大量的可变数据,那么计算机就必须具备存储可变数据的能力. 比如: 1.时间每一秒都在发生变化 ...