从Android Java基础之上学习C/C++语言6 --C语言基础--联合体与枚举

时间:2022-09-05 21:35:24

前言

NDK开发需要用到C/C++语言,为什么需要这两个语言?因为通过NDK开发能够解决Java做不到或者Java做的话效率、安全性会很低的问题。比如说视频处理(直播)、GIF的处理(需要对内存进行大量地分配和释放)、支付SDK(安全性)等。

学习NDK能够大大开阔我们的视野,NDK是一些大公司都要求掌握的技术,因此很有学习的必要。

本系列介绍的是NDK开发里面会用到的C/C++语言知识,其他的知识暂时不作介绍。这里并不会从零开始介绍,而是在学习了Java的基础之上来学习,这样能够大大提高我们的效率,又能反过来更加深刻地理解Java的机制。要求读者最好有一定(最基本的)Java语言(编程语言)基础

联合体(共用体)

不同类型的变量共同占用一段内存(相互覆盖),联合变量任何时刻只有一个成员存在,节省内存

联合体变量的大小=最大的成员所占的字节数(字节对齐 )

比喻:同穿一条裤子

union MyValue{
int x;
int y;
double z;
};

void main(){
union MyValue v;
v.x = 90;
v.y = 100; //最后一次赋值有效
v.z = 23.8;

printf("%d,%d,%lf\n", v.x, v.y, v.z);
system("pause");
}

JNI头文件中的联合体:

typedef union jvalue {
jboolean z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong j;
jfloat f;
jdouble d;
jobject l;
} jvalue;

枚举(enumeration)

枚举(列举所有的情况),限定值的取值范围,保证取值的安全性。

enum Day{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};

void main(){
enum Day d = Tuesday;

printf("%#x,%d\n", &d, d);
system("pause");
}