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语言多级指针,结构体,联合体,枚举,自定义类型的更多相关文章

  1. C语言基础(19)-结构体,联合体,枚举和typedef

    一.结构体 1.1 结构体struct定义及初始化 #include <stdio.h> // 这个头文件在系统目录下 #include <stdlib.h> // 使用了sy ...

  2. Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:函数指针 1.函数指针顾名思义就是定义一个指针变量指向一个函数,和一级指 ...

  3. Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

    Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...

  4. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  5. C语言第九讲,结构体

    C语言第九讲,结构体 一丶结构体的定义 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种 ...

  6. 【AT91SAM3S】SAM3S-EK Demo工程中,LCD驱动程序的加载(函数指针结构体)

    为了调试LCD,在英倍特的板子上烧Atmel的sam3s-ek_demo_1.4_source示例代码.LCD显示正常了,却找不到LCD的驱动究竟在哪. 花了好久,追踪到了这个执行过程. 进入main ...

  7. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  8. C语言笔记之结构体

    结构的本质是C语言的一种数据抽象,通俗的说,是基本数据类型的重组. 为什么要重组呢?由于基本数据类型不够用了.为什么不够用了呢?由于须要的信息类型太多了. 这是一个非常大的话题.信息本来是没有什么类型 ...

  9. Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...

随机推荐

  1. O(1)空间内实现矩阵转置

    思路:  * 每个元素转置前后会形成一个环(一个数字有多个环)  * 利用环来移动元素达到转置  * 关键:  * 1.得到元素下标的前驱后继,  * 2.判断环是否已走过(意味属于一个环的元素一次转 ...

  2. git 同步勾子

    #!/bin/bash git --git-dir=/var/www/domain/.git --work-tree=/var/www/domain pull uwsgi --reload /tmp/ ...

  3. Git之(六)标签管理

    发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...

  4. pdflush进程详解

    一.简介     由于页高速缓存的缓存作用,写操作实际上会被延迟.当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据.在内存中累积起来的脏页最终必须被写回磁盘.在以下两种情况发生时, ...

  5. Unity UGUI实现分段式血条

    我们可以看到像英雄联盟等游戏里英雄头顶的血条显示并非是纯色的,而是根据血量的多少而显示一定量的格子,这种方式明显是比较友好.比较美观的,事实上我们的游戏里面也想实现这样的效果,那该怎么办呢?根据血量的 ...

  6. 2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用

    1        打开建好的T32  Cocos2dx-3.2的一个项目 2        设置Cocos显示窗口的位置是在AppDelegate.cpp中: 3  设置自适应窗口大小的代码是在上面的 ...

  7. 1026. Table Tennis (30)

    题目如下: A table tennis club has N tables available to the public. The tables are numbered from 1 to N. ...

  8. [ExtJS5学习笔记]第二十三节 Extjs5中表格gridpanel的列格式设置

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39665979 官方文档:http://docs.sencha.com/extjs/5. ...

  9. 【移动开发】自定义ProgressBar

    <ProgressBar android:layout_centerInParent="true" android:layout_width="30dp" ...

  10. Mac下hosts文件配置

    工作中总会因为莫名其妙的原因,比如Mac下面打不开某网站,但是在windows 7下面却可以,此时只需两步即可完成在Mac下面上网.在Windows下面Win+R,输入cmd,进入命令行,将在wind ...