java jni 结构体_JNI基础 -- C++基础知识(结构体&共用体 )

结构体

类似于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,那它就是自然对齐的。

内存对齐的原则有两个:

结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)

结构体大小必须是所有成员大小的整数倍,也即所有成员大小的公倍数。

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

内存对齐的意义如图:

96dd0d816c79

内存对齐

共用体

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值