共用体与枚举

  1. 共用体

    • 共同体和结构体类似,也是一种构造类型的数据结构,既然是构造类型的,咱们先定义除类型,然后用类型定义变量
    • 定义共用体类型得方法和结构体非常相似,把struct 改成union就可以
      • 在进行某些算法得时候,需要使几种不同类型的变量存到同一段内存单元中,几个变量间相互重叠
      • 这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作"共用体"类型结构,共用体所有成员占有同一段地址空间
    • 共用体的大小是其占内存长度最大的成员的大小
    • 举例
      • typedef struct data{
      • short int i;
      • char ch;
      • float f;
      • }DATAL;
      • DATA temp1; 结构体变量temp1 最小占7个字节(不考虑字节对齐)
      • typedef union data{
      • short int i;
      • char ch;
      • float f;
      • }DATA;
      • DATA temp2; 共用体temp2占4个字节,即i、ch、f共用4个字节
      • printf("%d\n",sizeof(temp2));
      • printf("%p\n",&(temp2));
      • printf("%p\n",&(temp2.i));
      • printf("%p\n",&(temp2.ch));
      • printf("%p\n",&(temp2.f));
      • 结果:temp2的大小为4个字节,下面几个地址都是相同的,证明了共用体各个成员占相同的内存单元
    • 共用体的特点
      • 同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用
      • 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有
      • 共用体变量的地址和它的各成员的地址都是同一地址
      • 共用体变量的初始化
    • union data a= {123};初始化共用体为第一个成员
    • 举例
      • typedef union data{
      • unsigned char a;
      • unsigned int b;
      • } DATA;
      • int main(){
      • DATA temp;
      • temp.b = 0xff ff ff ff;
      • printf("temp.b =%x\n",temp.b);
      • temp.a = 0x0d;
      • pritnf("temp.a = %x\n",temp.a);
      • pritnf("temp.b =%x\n",temp.b);
      • }
      • 结果 temp.b = ffffffff temp.a =d temp.b = ffffff0d
  2. 枚举
    • 将变量的值一一列举出来,变量的值只限于列举出来的值的范围内
    • 枚举类型也是个构造类型的,既然是构造类型的数据类型,就得先定义类型,再定义变量
    • 枚举类型的定义方法
      • enum 枚举类型名{
      • 枚举值列表:
      • };
      • 在枚举值表中应列出所有可用值,也称为枚举元素
      • 枚举变量仅能取枚举值所列元素
    • 枚举变量的定义方法
      • enum 枚举类型名 枚举变量名;
    • 举例
      • 定义枚举类型 week
      • enum week //枚举类型
      • {
      • mon,tue,wed,thu,fri,sat,sun
      • };
      • enum week workday,weekday; //枚举变量
      • workday与weekday 只能取 sun.... sat中的一个
      • workday = mon;// 正确
      • workday = tue;//正确
      • workday = abc;// 错误,枚举值中没有abc
    • 注意: 枚举值是常量。不能再程序中用赋值语句再对它赋值
      • 列如 sun = 5; mon = 2; sun = mon;都是错误的
      • 枚举元素本身由系统定义了一个表示序号的数组,默认是从0开始顺序定义为0,1,2...
        • 如在week 中,mon值为0,tue值为1,....,sun值为6
      • 可用改变枚举值的默认值:如
        • enum week //枚举类型
        • {
        • mon = 3, tue, wed,thu,fri=4,sat,sun
        • };
        • mon = 3 tue= 4,以此类推
        • fri = 4 以此类推
      • 注意: 在定义枚举类型的时候枚举元素可以用等号给它赋值,用来代表它的数值,在程序中,不能再次对枚举元素赋值,因为枚举元素是常量

原文地址:https://www.cnblogs.com/fengzi759/p/11618715.html

时间: 2024-10-07 12:38:41

共用体与枚举的相关文章

结构体、共用体、枚举____笔记

-------------------讲在前面 老规矩,本人小菜. 互联网是发达的,神奇的.其中,有开源与不开源一说,我不知道我懂多少. 我在网上取我所需,但是有时候会标注来源,有时候没标注.如果某大神觉得被冒犯了,请联系删除. 我会有复制粘贴,但我并不认为拿过来就是我的东西,只是纯粹的欣赏,学习. 开博客,主要是觉得对自己学习有益.我会记录自己觉得有意义的东东. 如果有人见到本文章,是我的荣幸,希望对你有所帮助. 当然,我不保证绝对正确,若你发现不对的地方,可以评论或者联系,指正批评,大家相互

结构体,共用体和枚举类型的区别

结构体是一种构造类型,它的每一个成员都可以是一个基本的数据类型或者又是一个构造类型(结构体的嵌套使用),它的所有成员都能共存,这也是它和共用体和枚举类型的最大区别.它的简单定义如下.  struct{     char  i  ;     int   j  ;     struct add ;  } 每一个定义的变量,它们的是可以改变的,但它们的数据类型是不能改变的,共用体就是一种可以在同一存储区域变成不同数据类型的一种数据类型.它采用的是覆盖存储技术,准许不同的数据类型相互覆盖.它的简单定义如

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

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 共用体 枚举 类型定义符 示例cStruct.h #ifndef _MYHEAD_STRUCT_ #define _MYHEAD_STRUCT_ #ifdef __cplusplus extern "C" #endif char *demo_cStruct(); #endif cStruct.c /* * 结构体,共用体,枚举,类型定义符 * * 注:结构体变量在做参数传递时,其内每个

C++程序设计之结构体,共用体,枚举和typedef

[1]结构体的基本功 注意结构体里面可以有很多东西,可以结构体里面包含结构体 #include<iostream> using namespace std; struct Date { int month; int day; int year; }; struct Student { int num; char name[20]; char sex; Date birthday; float score; }student1,student2= {1002,"wangli"

实验6 结构体、共用体与枚举

实验6 结构体.共用体与枚举 实验结论 Part1: 结构体类型及编程应用 程序ex1_2.cpp,补足后的程序源码↓ #include <stdio.h> const int N=5; // 定义结构体类型struct student,并定义STU为其别名 typedef struct student { long no; char name[20]; int score; }STU; // 函数声明 void input(STU s[], int n); int findMinlist(S

[C/C++基础] 3.结构体、共用体、枚举

概述: 结构体和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,其次相同结构的结构体变脸是可以相互赋值的. 共用体(联合体)和结构体都是由多个不同的数据类型成员组成,但在任何同一时刻,共用体值存放了一个被选中的成员.而结构体的所有成员都存在. C++的枚举(enum)工具提供了另外一种可以替代const来创建符号常量的方式,枚举表是枚举常量的集合. 3.1 结构体struct 结构体类型变量的定义一般形式为: struct 结构体类型名{ 类型1 成员名1; 类型2 成员名2;

共用体,枚举体和typedef

共用体变量定义: union  共用体名 { 成员表列}变量表列: 特点:1.同一个内存段可以用来存放几种不同类型的成员 ,但在每一瞬间只能存放其中一种,而不是同时存放几种.共用体变量中起作用的是最后一次存放的成员.共用体变量的地址和它各个成员的地址都是同一地址. 2.不能对共用体变量名赋值,不能引用变量名来得到一个值,不能在定义共用体变量时对它初始化. 3.不能把共用体变量作为函数参数,也不能是函数带回共用体变量,但可以使用共用体变量的指针.(与结构体变量这种用法相仿). 4.共用体类型可以出

8.1 结构体 共用体 typedef 枚举

typedef :  给类型起一个新的名字 int main() { unsigned int a = 10; } 可以用下面表示: typedef unsigned int u32_t; int main() { u32_t a = 10; } 与definde的区别: typedef char *  N; #define N char* N p1,p2,p3; define的话  p2 p3 变成了char 类型 结构体 :不同类型元素的汇聚 ①匿名结构体 struct{ int id;  

梓益C语言学习笔记之结构体-共用体-枚举

有人说,我们需要将不同类型的数据组合成一个整体,于是,就有了结构体 一.结构体的概念: 一种或多种基本类型或构造类型的数据的集合. 二.定义方法: 先定义结构体类型,再去定义结构体变量 struct  结构体类型名{ 成员列表 }; 如: struct stu{ int num; char name[20]; char sex; }; struct stu  lucy,bob,lilei;//定义了三个struct stu类型的变量 每个变量都有三个成员,分别是num name  sex 通常咱