开发者社区> 刘桂林> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: <div class="markdown_views"> <h1 id="android-for-jni五c语言多级指针结构体联合体枚举自定义类型">Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型</h1> <hr> <blockquote> <p>我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了</p>
+关注继续查看

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来

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
初识C语言第三话之指针与结构体
初识C语言第三话之指针与结构体
13 0
C语言——指针和结构体
对于C语言指针和结构体知识的分享
31 0
【C语言】回炉重造的C之指针+结构体
【C语言】回炉重造的C之指针+结构体
43 0
【C语言】回炉重造的C之指针+结构体
【C语言】回炉重造的C之指针+结构体
170 0
C语言中 指针与结构体
   就像数组一样,指向结构体的指针存储了结构体第一个元素的内存地址。与数组指针一样,结构体的指针必须声明和结构体类型保持一致,或者声明为void类型。 1 2 3 4 5 6 7 8 9 10 11 12 13 struct person ...
657 0
《C语言及程序设计》实践项目——用文件输入输出初步
返回:贺老师课程教学链接 【项目1-由键盘到文件】(1)从键盘输入一个文件名,以及一个以#结束的字符序列,将输入的字符保存到文件中去。 #include "stdio.h" #include "stdlib.h" int main() { FILE *fp ; char ch,fname[10]; printf("文件名:"); gets(fname);
1110 0
《C语言及程序设计》实践参考——由键盘到文件
返回:贺老师课程教学链接  项目要求 【项目1-由键盘到文件】(1)从键盘输入一个文件名,以及一个以#结束的字符序列,将输入的字符保存到文件中去。 #include "stdio.h" #include "stdlib.h" int main() { FILE *fp ; char ch,fname[10]; printf("文件名:"); gets(fna
1029 0
《C语言及程序设计》实践参考——文件中的符号个数
返回:贺老师课程教学链接  项目要求 【项目2-文件中的符号个数】统计一个文本文件中数字、空格、字母出现的次数,以及文件的字节数,并将结果输出,文本文件名在程序中输入(请自建文本文件完成测试)。[参考解答] #include "stdio.h" #include "stdlib.h" int main() { FILE *fp ; int alpha=0, number=0,
1091 0
《C语言及程序设计》实践参考——成绩统计
返回:贺老师课程教学链接  项目要求 【项目3-成绩统计】文件english.dat(这个文件中的数据量,超出了你之前所有的体验)中已经有了学生的英语考试成绩数据。(1)请编程从english.dat中读取数据,求出这次考试的平均成绩,并统计输出优秀人数和不及格人数。请在下面程序基础上填空完成: #include <stdio.h> #include <stdlib.h>
1021 0
《C语言及程序设计》实践参考——污损的单据
返回:贺老师课程教学链接  项目要求 【项目9-污损的单据】(1)有等式[※×(※3+※)]2=8※※9,其中※处为1个数字,滴上了墨水无法辨认。请编程找出※表示哪个数字。 [参考解答] #include <stdio.h> int main() { int a,b,c,d,e,s; for(a=0;a<=9;a++) { for
867 0
+关注
刘桂林
心有菩提手有刀,欲成舍利却成妖
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android内存泄漏自动化链路分析组件Probe
立即下载
Android开发之多进程架构
立即下载
Android应用启动速度和内存优化实践
立即下载