iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Android NDK开发(C语言--联合体与枚举)
  • 554
分享到

Android NDK开发(C语言--联合体与枚举)

2024-04-02 19:04:59 554人浏览 八月长安
摘要

目录1.联合体1.1定义共用体1.2共用体占用的内存应足够存储共用体中最大的成员。1.3联合变量任何时刻只有一个变量存在,最后一次赋值有效1.4JNI头文件中的联合体2.枚举1.联合

1.联合体

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

1.1定义共用体

为了定义共用体,您必须使用 uNIOn 语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。

union 语句的格式如下:


union [union tag]
{
   member definition;
   member definition;
   ...
   member definition;
} [one or more union variables];


union tag 是可选的,每个 member definition 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在共用体定义的末尾,最后一个分号之前,您可以指定一个或多个共用体变量,这是可选的。下面定义一个名为 Data 的共用体类型,有三个成员 i、f 和 str:


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


现在,Data 类型的变量可以存储一个整数、一个浮点数,或者一个字符串。这意味着一个变量(相同的内存位置)可以存储多个多种类型的数据。您可以根据需要在一个共用体内使用任何内置的或者用户自定义的数据类型。

1.2共用体占用的内存应足够存储共用体中最大的成员。

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


union Data
{
   int i;
   float f;
   char  str[20];
};
 
void main( )
{
   union Data data;        
 
   printf( "Memory size occupied by data : %d\n", sizeof(data));
 
   system("pause");
}


结果输出:

Memory size occupied by data : 20

1.3联合变量任何时刻只有一个变量存在,最后一次赋值有效


union  MyValue {

    int x;
    int y;
    double z;

};



void main() {

    union MyValue d1;

    d1.x = 90;

    d1.y = 100; //最后一次赋值有效

    //d1.z = 23.8;

    printf("%d , %d, %lf\n", d1.x, d1.y, d1.z);

    d1.z = 23.8;
    printf("%d, %d, %lf\n", d1.x, d1.y, d1.z);

    system("pause");

}

结果输出:

100 , 100, -92559592117433135502616407313071917486139351398276445610442752.000000
-858993459, -858993459, 23.800000

1.4JNI头文件中的联合体


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


2.枚举

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


enum Day
{
    Monday,//默认为0,后续枚举成员的值在前一个成员上加1
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
};


void main() {
    //枚举的值,必须是括号中的值
    enum Day d = Monday;
    printf("%#x,%d\n", &d, d);

     d = Wednesday;
    printf("%#x,%d\n", &d, d);

    getchar();
}

结果输出:

0xdaaff5e4,0
0xdaaff5e4,2

  • (1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
  • (2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
  • (3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
  • (4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
  • (5) 枚举型是预处理指令#define的替代。
  • (6) 类型定义以分号;结束。

综合举例:


enum Season
{
    spring, summer = 100, fall = 96, winter
};

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

void main()
{
    
    printf("%d \n", spring); // 0
    printf("%d, %c \n", summer, summer); // 100, d
    printf("%d \n", fall + winter); // 193
    enum Season mySeason = winter;
    if (winter == mySeason)
        printf("mySeason is winter \n"); // mySeason is winter

    int x = 100;
    if (x == summer)
        printf("x is equal to summer\n"); // x is equal to summer

    printf("%d bytes\n", sizeof(spring)); // 4 bytes

                                          
    printf("sizeof Weekday is: %d \n", sizeof(Weekday)); //sizeof Weekday is: 4

    Weekday today = Saturday;
    Weekday tomorrow;
    if (today == Monday)
        tomorrow = Tuesday;
    else
        tomorrow = (Weekday)(today + 1); //remember to convert from int to Weekday


    getchar();
}

结果输出:

0
100, d
193
mySeason is winter
x is equal to summer
4 bytes
sizeof Weekday is: 4

到此这篇关于Android NDK开发(C语言--联合体与枚举)的文章就介绍到这了,更多相关C语言--联合体与枚举内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Android NDK开发(C语言--联合体与枚举)

本文链接: https://www.lsjlt.com/news/159488.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android NDK开发(C语言--联合体与枚举)
    目录1.联合体1.1定义共用体1.2共用体占用的内存应足够存储共用体中最大的成员。1.3联合变量任何时刻只有一个变量存在,最后一次赋值有效1.4JNI头文件中的联合体2.枚举1.联合...
    99+
    2022-11-12
  • C语言枚举与联合体深入详解
    目录前言枚举枚举的定义枚举的使用枚举的优点联合(共用体)联合体的定义联合体的特点联合体大小的计算总结前言 在C语言中,有三个自定义类型——结构体,枚举,联合,...
    99+
    2022-11-13
  • C语言结构体,枚举,联合体详解
    目录1.什么是结构体、枚举、联合体2.定义结构体2.1 包含结构体成员变量、variable2.2 tag、结构体成员变量2.3 用结构体声名变量2.4 用typedef 创建新类型...
    99+
    2022-11-12
  • C语言结构体,枚举,联合体如何使用
    本篇内容介绍了“C语言结构体,枚举,联合体如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、匿名结构体struct{ &n...
    99+
    2023-07-02
  • C语言中联合体与共用体和枚举使用语法示例
    目录联合体/共用体-union枚举-enum联合体/共用体-union 声明联合体的语法格式typedef union 联合体名 {数据类型 成员名1;...
    99+
    2022-12-26
    C语言联合体 C语言共用体 C语言枚举
  • 详解C语言结构体,枚举,联合体的使用
    目录一、匿名结构体二、结构体的自引用1、声明时不要自己引用自己2、结构体重命名时不能使用重命名三、结构体内存对齐规则1、结构体内存计算2、结构体嵌套3、通过调整结构体成员顺序,压缩内...
    99+
    2022-11-13
  • C语言中枚举与联合体的使用方法(enum union)
    目录enum的定义 enum对比#define宏常量的好处 union的定义 联合体大小的计算 联合体配合算大小端的问题 总结enum的定义 枚举顾名思义就是一一列举,把...
    99+
    2022-11-12
  • C语言枚举与联合图文梳理讲解
    目录思维导图1.枚举1.1 枚举类型的定义1.2 枚举的优点1.3 枚举的使用2. 联合(共用体)2.1 联合类型的定义2.2 联合的特点2.3 联合大小的计算思维导图 1.枚举 ...
    99+
    2023-01-17
    C语言枚举与联合 C语言枚举 C语言联合
  • C语言中枚举和联合体的示例分析
    这篇文章主要介绍了C语言中枚举和联合体的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。枚举什么是枚举?顾名思义,就是一一列举,把所有的情况,所有的取值,一一列举出来。...
    99+
    2023-06-25
  • C语言中的自定义类型之结构体与枚举和联合详解
    目录1.结构体1.1结构的基础知识1.2结构的声明1.3特殊的声明1.4结构的自引用1.5结构体变量的定义和初始化1.6结构体内存对齐1.7修改默认对齐数1.8结构体传参2.位段2....
    99+
    2022-11-13
  • C语言深入探究自定义类型之结构体与枚举及联合
    目录1.结构体1.1结构体类型的声明1.2结构的自引用1.3结构体变量的定义和初始化1.4结构体内存对齐1.5结构体传参1.6结构体实现位段(位段的填充&可移植性)2.枚举2...
    99+
    2022-11-13
  • C语言自定义类型详解(结构体、枚举、联合体和位段)
    目录前言一、结构体1、结构体类型的声明2、结构体的自引用3、结构体变量的定义和初始化4、结构体内存对齐5、结构体传参二、位段1、位段的定义 2、位段的内存分配3、位段的应用...
    99+
    2022-11-12
  • C语言自定义类型超详细梳理之结构体枚举联合体
    目录一、什么是结构体1.结构体实现2.匿名结构体类型3.结构体自引用4.结构体的内存对齐5.结构体位段 二、什么是枚举1.枚举类型的定义2.枚举的优点三、联合(共用体)1.什么是联合...
    99+
    2022-11-13
  • C语言自定义数据类型的结构体、枚举和联合详解
    结构体基础知识 首先结构体的出现是因为我们使用C语言的基本类型无法满足我们的需求,比如我们要描述一本书,就需要书名,作者,价格,出版社等等一系列的属性,无疑C语言的基本数据类型无法解...
    99+
    2022-11-12
  • C语言关于自定义数据类型之枚举和联合体详解
    目录前言枚举枚举类型的定义枚举类型的优点枚举类型的使用枚举中需要注意的点联合体联合体类型的定义联合体的特点联合体的使用联合体存在内存对齐结语前言 在C语言的自定义数据类型中,除了我们...
    99+
    2022-11-12
  • C语言驱动开发内核枚举IoTimer定时器解析
    目录正文枚举Io定时器过程GetIoInitializeTimerAddress()函数特征搜索部分IO_TIMER结构体定义正文 今天继续分享内核枚举系列知识,这次我们来学习如何通...
    99+
    2022-11-13
    C语言 内核枚举IoTimer定时器 C语言 内核枚举
  • C语言驱动开发内核枚举IoTimer定时器怎么实现
    本篇内容主要讲解“C语言驱动开发内核枚举IoTimer定时器怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言驱动开发内核枚举IoTimer定时器怎么实现”吧!正文IoTimer内核定...
    99+
    2023-07-04
  • C语言超详细讲解结构体与联合体的使用
    目录结构体offsetof-宏位段枚举联合体(共用体)结构体 结构体内存对齐问题: 当我们在计算结构体的大小时,我们便需要清楚的知道结构体内存对齐是什么。 存在内存对齐的原因可细分为...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作