android jni 结构体_Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型-阿里云开发者社区...

Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了

一.多级指针

指针的概念我们在前面也讲了许多,也提到了多级指针的概念,那具体我们怎么去操作呢

#include

#include

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

#include

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

#include

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

#include

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

#include

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

#include

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

#include

//自定义类型

typedef int hello;

main(){

hello i = 3;

printf("%d\n",i);

//让窗口停留

int age ;

scanf("%d",&age);

}

这个例子完全就是定义int,我们下篇就会讲到,我们的NDK开发,我们这里就不讲的那么详细,我们说NDK的时候尽量详细点

这篇先到这里,C的基本东东我们了解一下就可以了,下节课我们就回到我们的android来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值