1.枚举

  枚举类型的声明形式为:   enum  枚举类型名   {  变量值列表 };  

   变量值列表里都是整型变量,另外不要忘记最后面的分号! 

 

 比如,enum  weekday   { sun,mon,tue,wed,thu,fri,sat };

这里的枚举元素sun、mon...都没有指定值,它们就使用默认值,依次为0,1,2...。即sun就是0,mon就是1,...sat是6。也可以在声明枚举类型时指定枚举元素的值,比如

enum  weekday  { sun=7, mon=1, tue, wed, thu, fri, sat };

这里sun就是7,mon是1,后面的值在mon的基础上依次加1,即tue等于2,wed为3...sat是6。

   枚举元素按常量处理,不能对它们赋值除了声明的时候,像sun=0;这样的语句就是非法的。

枚举类型我们声明了以后就能像int、float等类型那样用了,可以定义枚举类型的变量。整数值需要赋给枚举变量时,应进行强制类型转换。

  备注:这里只是定义了一个枚举,类似于定义了一个类,后面可以以此枚举为类型,定义相应的枚举对象。

2.结构体 

  结构体就是由不同数据类型也可以是相同数据类型的若干数据组成的结合体,声明形式为:

        struct  结构体名
        {
                数据类型   成员名 1;
                数据类型   成员名 2;
                      :
                数据类型   成员名 n;
        };

这里最后那个分号也不要忘记哦。

    结构体类型变量的定义格式如下:结构体类型名   结构体变量名;

   可以先声明了结构体类型以后再定义结构体变量,也可以把它们放在一起。

   结构体变量占用内存的大小可以用sizeof(结构体类型名或变量名)计算

   在定义结构体变量时可以直接赋初值。结构体成员的使用形式是:结构体变量名.成员名。

    struct student        //学生信息结构体
       { 
               int       num;//学号
               char   name[20];//姓名
               char   sex;//性别
               int       age;//年龄
       }stu={97001,"Lin Lin",'F',19};         // 声明结构体类型的同时,定义结构体类型的变量,并赋初值。也可以分开。

int _tmain(int argc, _TCHAR* argv[])
       { 
                 cout<<stu.num<<"  "<<stu.name<<"  "<<stu.sex<<"  "<<stu.age;
                 return 0;
       }

3.共同体Union

  有的时候需要几个不同类型的变量共用一组内存单元,这时就需要用联合体,联合体类型声明的语法形式为:

       union 联合名
       {
                数据类型     成员名 1;
                数据类型     成员名 2;
                      :
                数据类型     成员名 n;
       };

联合体类型变量声明的语法形式是:联合体类型名   联合体变量名;。联合体类型变量的引用形式是:联合体变量名.成员名。

   union uarea
       { 
                 char    c_data;
                 short   s_data;
                 long     l_data;
       }

联合体类型在内存中是怎样占用内存单元的呢?联合体占用的内存大小是其占内存最大的成员需要的内存大小,就像上边的uarea,它占用的内存大小就是最大成员long需要的4个字节。联合体里同时只能放一个成员的值。uarea放c_data时c_data占用第一个字节,放s_data时s_data占用前两个字节,放l_data时l_data占用全部的4个字节。

C++之 自定义数据类型 枚举、结构体、共用体的更多相关文章

  1. 5、数组&字符串&结构体&共用体&枚举

    程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...

  2. C++结构、共用体、枚举

    一.结构 结构是C++OOP的基石.学习有关结构的知识僵尸我们离C++的核心OOP更近. 结构是用户定义的类型,同一个结构可以存储多种类型数据,这使得将一个事物的不同属性构成一个对象成为了可能.另外C ...

  3. C语言高级-结构,共用体,文件,链表

    C语言结构 标准声明方式 struct student{        int age;        char sex;    }; 这个可以在main函数中定义:  struct student ...

  4. 自定义数据类型 C++ 结构体类型 共同体类型 枚举类型 类类型{}

    一.结构体类型 结构体类型,共用体类型,枚举类型,类类型等统称为自定义类型(user-defined-type,UDT). 结构体相当于其他高级语言中的记录(record);例如: struct St ...

  5. C++复合类型(结构,共用体,枚举)

    •结构是用户定义的类型,而结构的声明定义了这种类型的数据属性. 一.关键字struct声明:   定义了一种新类型 struct inflatable{ char name[20];//结构成员 fl ...

  6. C语言基础 (11) 结构体 ,共用体 枚举 typedef

    1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...

  7. 瘋子C语言笔记(结构体/共用体/枚举篇)

    (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...

  8. 编程C语言进阶篇——自定义数据类型:结构体

    一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...

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

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

随机推荐

  1. [FJOI2018]领导集团问题 mulitset合并

    P4577 [FJOI2018]领导集团问题 链接 luogu bzoj 他是个重题 bzoj4919: [Lydsy1706月赛]大根堆 代码改改就过了 思路 求树上的lis,要好好读题目的!!! ...

  2. MyBatis-plus使用

    https://blog.csdn.net/qq_32867467/article/details/82944674 官网: https://mp.baomidou.com/guide/optimis ...

  3. git push时报错:Updates were rejected because the tip of your current branch is behind

    出现这样的问题是由于:自己当前版本低于远程仓库版本 有如下几种解决方法: 1.使用强制push的方法: git push -u origin master -f 这样会使远程修改丢失,一般是不可取的, ...

  4. 将webcam设置为网站favicon

    今天在Twitter上看到用户davywtf将webcam设置为网站favicon. 在线示例: https://wybiral.github.io/code-art/projects/tiny-mi ...

  5. H5外包团队 MUI文档技术资料大全

    HTML5+ API缓存:http://www.dcloud.io/docs/api/zh_cn/cache.html h.js:http://www.hcoder.net/h vue.js:http ...

  6. Asp.net core 学习笔记 Razor Page

    更新 2019-04-27 最近做了更多的 research 发现微软视乎有意发展 razor page. razor page 的定位是 mvvm, 现在还有个叫 blazor 的东西, 类似用 c ...

  7. legend2---开发日志11(如何提高终极开发效率)

    legend2---开发日志11(如何提高终极开发效率) 一.总结 一句话总结: 实在没必要摸索着做,直接学了做,用专门的东西来做,岂不是要省时省事很多.岂不美哉. 1.vue中的滚动字幕动画效果如何 ...

  8. 在vue中使用watch监听对象或数组

    最近发现在vue中使用watch监听对象或者数组时,当数组或者对象只是单一的值改变时,并不会出发watch中的事件. 在找问题过程中,发现当数组使用push一类的方法时,会触发watch,如果只是单一 ...

  9. 记录Sql2012附加Sql2008的数据库出错的解决方案

    只需要对要附加的数据文件[右键]->[属性]->[安全]->(选择“Authenticated Users”用户)[编辑]->让“Authenticated Users”用户具 ...

  10. 虚拟机中安装Linux系统

    本教程的运行环境:Windows 10 , 虚拟机 VirtualBox,Ubuntu 16.04 1.准备 下载 VirtualBox 下载OVA镜像64位 http://releases.ubun ...