美文网首页
JNI基础 -- C++基础知识(结构体&共用体 )

JNI基础 -- C++基础知识(结构体&共用体 )

作者: 刘小厨 | 来源:发表于2020-04-18 14:00 被阅读0次

    结构体

    类似于Java中的Bean对象,可以将一些变量封装为一个结构体
    声明结构体的关键字是struct,也可以通过typedef别名定义
    举个栗子:

    struct Student
    {
        //不同的数据类型可以声明在一个结构体中
        int age;
        short j;
    };
    
    
    int main()
    {
        //结构体的使用
        struct Student student;
        student.age = 10;
        return 0;
    }
    

    还有一种使用结构体的简单方式,在声明结构体后面直接定义,如下:

    struct Student
    { 
        int age;
        short j;
    }student1,student2;//student1和student2就可以直接使用了
    
    

    下面我们通过printf("结构体大小%d",sizeof(student));打印一下结构体的大小,控制台输出结果是:

    结构体大小8
    

    我们声明的两个变量,一个是int(四个字节),一个是short(两个字节),但是结构体的大小是8个字节;
    原因是:在C执行的过程中,给结构体等分配内存的时候遵循内存对齐原则。

    内存对齐

    定义:内存对齐跟数据在内存中的位置有关。如果-一个变量的内存地址正好位于它长
    度的整数倍,他就被称做自然对齐。比如在32位cpu下, 假设一个整型变量的地址为
    0x00000004,那它就是自然对齐的。
    内存对齐的原则有两个:

    1. 结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)
    2. 结构体大小必须是所有成员大小的整数倍,也即所有成员大小的公倍数。

    所以上面Student结构体的short类型的变量分配了四个字节,只不过后面两个字节是不起作用的。所以整个结构体占用了8个字节

    内存对齐的意义如图:

    内存对齐

    共用体

    结构体和共用体表示的含义是一致的

    1、定义:共用体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据
    类型。可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。
    共用体提供了一种使用相同的内存位置的有效方式。

    通过union关键字声明共用体,存放不同的数据类型:

    {
        int i;
        float f;
        char str[20];
    };
    

    注意:共用体占用的内存应足够存储共用体中最大的成员。例如,在上面的实例中,Data 将占用20个字节的内存空间,因为在各个成员中,字符串所占用的空间是最大的。下面的实例将显示上面的共用体占用的总内存大小:

    举个栗子:

    union Student
    {
        int i;
        int j;
        float k;
    };
    
    int main()
    {
        union Student student;
        student.i = 10;
        student.j = 22;
        printf("i的地址: %#x\n", &student.i);
        printf("j的地址: %#x\n", &student.j);
    }
    

    控制台输出结果为:

    i的地址: 0x4ffb44
    j的地址: 0x4ffb44
    

    我们看到i和j的首地址是一样的,在赋值操作后打印i和j的值

     printf("i的值: %d\n", student.i);
     printf("j的值: %d\n", student.j);
    //输出结果为
    //i的值: 22
    //j的值: 22
    

    打印一下共用体大小:

    printf("共用体大小: %d\n", sizeof(student));
    //输出结果
    //共用体大小: 4
    

    相关文章

      网友评论

          本文标题:JNI基础 -- C++基础知识(结构体&共用体 )

          本文链接:https://www.haomeiwen.com/subject/hhsuvhtx.html