C++学习笔记(七)--共用体、枚举、typedef
1.共用体 union
其定义与结构体类似:
union 类型名{
成员表列;
};
声明变量的方法也类似:
a. union 类型名{ b. union { c.类型名 变量名;
成员表列; 成员表列;
}a,b; }a,b;
长度计算:因为是从内存中同一起始地址开始的,所以占用内存长度最长的成员长度为共用体长度,而结构体不是,是将各个成员所占长度相加的。
引用:不能引用共用体变量,只能引用其成员,如定义了共用体变量a,引用其元素 a.xx; a.xxx;
注意:
a.共用体是能在同一内存段中存放几种不同类型的数据,但在每一瞬时只能存放其中的一种,即每一瞬时只有一个成员在起作用;
b.能够访问的共用体成员是最后一次赋值的成员,在对一个新的共用体成员赋值后,之前赋值的都已失去作用;
c.共用体变量的起始地址就是每个成员变量的起始地址。
d.不能对共用体变量名赋值,不能企图引用变量名来得到一个值,不能在定义共用体变量时对其初始化,不能用共用体变量名作函数参数。
举个共用体使用场合的例子:
在学校录入学生教师信息时,教师的信息包括:name,num,sex,job,position
学生的信心包括: name,num,sex,job,class
job = s => class;
job = t => position;
此时class和position就可以同占一个起始内存地址;定义结构体:
struct {
int num;
char name[20];
char sex;
char job;
union P{
int grade;
char position[10];
}category;
}person[2];
2.枚举类型
适用场景:一个变量的值只有几种可能。
enum 枚举类型名 {枚举常量列表}; //注意是枚举常量,是不能够赋值的
定义枚举类型变量:
enum week{sun,mon,tue,wen,thu,fri,sat};/*每个常量都是有值的,从左到右0-6,如果定义sun=7,即:
enum week{ sun=7,mon,tue,wen,thu,fri,sat };则第一个是7,其余的从7开始编号mon = 8*/
enum week day;//day就是枚举类型变量,在C++中不常使用 enum 即 week day;即可。
枚举类型可以比较,if( sun<mon );比较的是顺序号。未指定时,顺序号都是从0开始,自左向右递增。
所以可以这样赋值:
day = (week)2;//c强制类型转换
day = week(2);//c++强制类型转换
都表示:day = tue;
枚举类型常与switch语句合用
3.typedef 声明类型
这是用新的类型名代替已有的类型名
格式:
typedef 类型名 新类型名;//注意分号,新类型名一般用大写表示,以便与系统的区分开
几种常见形式:
a.结构体:
typedef struct {
int month;
int day;
int year;
}DATE;//DATE并不是一个结构体变量,而是这个结构体类型的新名称
b.typedef int NUM[10]; //声明NUM为整型数组类型,包含10个元素
NUM n; //定义n为包含10个元素的整型数组,int n[10];
c.typedef char *STRING; //声明STRING为字符指针类型
STRING p,s[10]; //p为字符指针变量,s为指针数组(有10个元素)
d.typedef int (*POINT)(); //声明POINT为指向函数的指针类型,函数返回整型值
POINT p; //p为POINT类型的指针变量
C++学习笔记(七)--共用体、枚举、typedef的更多相关文章
- C语言基础 (11) 结构体 ,共用体 枚举 typedef
1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...
- C语言学习笔记10-结构体、枚举、联合体
C语言学习笔记10-结构体.枚举.联合体 待传
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Go学习笔记07-结构体与方法
Go学习笔记07-结构体与方法 Go语言 面向对象 结构的定义与创建 面向对象 Go语言只支持封装,不支持继承和多态. Go语言中只有struct,即结构体:没有class. 结构的定义与创建 pac ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- python3.4学习笔记(七) 学习网站博客推荐
python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...
- iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】
iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
随机推荐
- ID学习一 Basic
Assignment 作用:定义变量并赋值 变量可以是新定义的也可以是已经存在的: 值可以是另一个变量的值.一个文本值.一个复杂的表达式(利用表达式编辑助手构造): 注意:一旦变量被定义,你不能删除变 ...
- Comet OJ - Contest #3 B -棋盘 (思维+分类讨论)
题目描述 小猫有一个 2\times N2×N 的棋盘,每一个格子放着一个黑棋子或白棋子. 小熊觉得小猫的棋盘不够好看,想要把棋盘上的一部分白棋子替换成黑棋子,使得所有黑棋子都能够在仅允许上下左右四个 ...
- pam模块
main 循环监控 独立的程序 根据配置防护 登陆 ca cert 私有口令 openssl 证书口令??
- vue单页面项目中解决安卓4.4版本不兼容的问题
1.cnpm安装 cnpm i babel-polyfill --save cnpm i es6-promise --save 2.main.js引入 import ‘babel-polyfill‘ ...
- 机器学习中的偏差(bias)和方差(variance)
转发:http://blog.csdn.net/mingtian715/article/details/53789487请移步原文 内容参见stanford课程<机器学习> 对于已建立 ...
- django快速搭建blog
python版本:3.5.4: Django版本:2.0 创建项目 创建mysite项目和 blog应用: django-admin startproject mysite # 创建mysite项目 ...
- 批量下载文件php
做了个照片墙,要提供批量下载照片的功能,如果你会文件下载,那批量也是小菜一碟,就是把文件打包压缩为 zip 文件再下载,而php的内置类ZipArchive()让你很容易实现. 首先,配置php.i ...
- BZOJ 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 网络流 + 二分答案
Description Farmer John is constructing a new milking machine and wishes to keep it secret as long a ...
- 浙大PAT CCCC L3-015 球队“食物链” ( 搜索 && 剪枝 )
题目链接 题意 : 有 n 个球队,给出主客场胜负图,找出一个序列 1.2.3..... 使得 1 战胜过 2 .2 战胜过 3.3 战胜过 4..... n 战胜过 1 ( 这个序列是 1~n 的其 ...
- spring boot 集成 mybatis 单元测试Dao层 控制台报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
最近帮同学做毕业程序,采用后端spring boot + mybatis + H2,将框架搭好进行各层的单元测试时,在dao层就出现了错,如图 于是在网上找各种资料,有的说是xml文件和接口没有一一对 ...