联合(union):

一、联合说明和联合变量定义

联合也是一种新的数据类型, 它是一种特殊形式的变量。

联合说明和联合变量定义与结构十分相似。其形式为:

union 联合名

{

数据类型 成员名;

数据类型 成员名;

...

}联合变量名;

联合表示几个变量公用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。

下例表示说明一个联合a_bc:

union a_bc

{

int i;

char mm;

};

再用已说明的联合可定义联合变量。

例如用上面说明的联合定义一个名为lgc的联合变量,可写成:

union a_bc lgc;

在联合变量lgc中, 整型量i和字符mm公用同一内存位置。

当一个联合被说明时, 编译程序自动地产生一个变量,其长度为联合中最大的变量长度。

联合访问其成员的方法与结构相同。同样联合变量也可以定义成数组或指针,但定义为指针时,也要用"->"符号, 此时联合访问成员可表示成:

联合名->成员名

另外, 联合既可以出现在结构内, 它的成员也可以是结构。

例如:

struct

{

int age;

char *addr;

union

{

int i;

char *ch;

}x;

}y[10];

若要访问结构变量y[1]中联合x的成员i, 可以写成:

y[1].x.i;

若要访问结构变量y[2]中联合x的字符串指针ch的第一个字符可写成:

*y[2].x.ch;

若写成"y[2].x.*ch;"是错误的。

二、结构和联合的区别

1. 结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻,联合中只存放了一个被选中的成员, 而结构的所有成员都存在。

2. 对于联合的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,而对于结构的不同成员赋值互不影响的。

下面举一个例了来加深对联合的理解。

main()

{

union

{                    /*定义一个联合*/

int i;

struct

{              /*在联合中定义一个结构*/

char first;

char second;

}half;

}number;

number.i=0x4241;          /*联合成员赋值*/

printf("%c%c/n", number.half.first, mumber.half.second);

number.half.first='a';    /*联合中结构成员赋值*/

number.half.second='b';

printf("%x/n", number.i);

getch();

}

输出结果为:

AB

6261

从上例结果可以看出: 当给i赋值后, 其低八位也就是first和second的值;当给first和second赋字符后,这两个字符的ASCII码也将作为i 的低八位和高八位。

简单的说,就是联合里面的所有变量共用一个内存区域,区域大小是所有变量中最大的那个。改动某一个变量的值,其他的值也会随之改变。

枚举(enum)

枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见。

例如表示星期的SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,就是一个枚举。

枚举的说明与结构和联合相似, 其形式为:

enum 枚举名

{

标识符[=整型常数],

标识符[=整型常数],

...

标识符[=整型常数],

}枚举变量;

如果枚举没有初始化,即省掉"=整型常数"时,则从第一个标识符开始,顺次赋给标识符0,1,2, ...。但当枚举中的某个成员赋值后, 其后的成员按依次加1的规则确定其值。

例如下列枚举说明后,x1, x2, x3, x4的值分别为0, 1, 2, 3。

enum string{x1, x2, x3, x4}x;

当定义改变成:

enum string

{

x1,

x2=0,

x3=50,

x4,

}x;

则x1=0, x2=0, x3=50, x4=51

注意:

1. 枚举中每个成员(标识符)结束符是",",   不是";", 最后一个成员可省略","。

2. 初始化时可以赋负数, 以后的标识符仍依次加1。

3. 枚举变量只能取枚举说明结构中的某个标识符常量。

例如:

enum string

{

x1=5,

x2,

x3,

x4,

};

enum strig x=x3;

此时, 枚举变量x实际上是7。

下面看一个例子:

main()

{

enum colors {red=1,green,blue}col;

int cl;

printf("1=red,2=green,3=blue.   seclect: ");

scanf("%d",&cl);

col=(enum colors) cl;       /*强制转换*/

switch(col)

{

case red:

printf("red/n");

break;

case green:

printf("green/n");

break;

case blue:

printf("blue/n");

break;

defalut:

break;

}

}

* **类型说明** *

类型说明的格式为:

typedef 类型 定义名;

类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型这里类型是Turbo C许可的任何一种数据类型定义名表示这个类型的新名字。

例如: 用下面语句定义整型数的新名字:

typedef int SIGNED_INT;

使用说明后, SIGNED_INT就成为int的同义词了,此时可以用SIGNED_INT定义整型变量。

例如:   SIGNED_INT i, j;(与int i, j等效)。

但 long SIGNED_INT i, j; 是非法的。

typedef同样可用来说明结构、联合以及枚举。

说明一个结构的格式为:

typedef struct

{

数据类型   成员名;

数据类型   成员名;

...

} 结构名;

此时可直接用结构名定义结构变量了。例如:

typedef struct

{

char name[8];

int class;

char subclass[6];

float math, phys, chem, engl, biol;

}student;

student Liuqi;

则Liuqi被定义为结构数组和结构指针。

c语言枚举3位数相加等于10,C语言 联合和枚举相关推荐

  1. c语言猜四位数游戏猜10次,C语言猜数字游戏--随机生成4个不相同的数字从小到大排序,用户开始游戏,如果用户猜对数字和数字对应的位置,界面回馈A,如果数字正确位置不正确,则回馈B...

    1.看程序运行截图吧!! 由于博主本人较笨,就不动画演示了,如果动画的话可能将是一个漫长的过程! 猜数字游戏.png 2.游戏题目 随机生成4个不相同的数字从小到大排序,用户开始游戏,如果用户猜对数字 ...

  2. c语言判断任意位数能否倒序数,C语言求助!一个三位数的逆序数,总是编不对...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include int main() { int n,a,b,c,sum,ge,shi,bai; printf(&q ...

  3. c语言判断正整数位数 请用strengh,C语言程序设计-4、12章习题解答.doc

    C语言程序设计-4.12章习题解答 C语言程序设计概述 一个C程序的执行是从 A . A.从main()函数开始,直到main()函数结束B.第一个函数开始,直到最后一个函数结束C.第一个语句开始,直 ...

  4. 一道PL/SQL题:一列数字中随机找出几个使得和等于10

    很久不怎么碰SQL和PL/SQL了,这方面的能力正在弱化,想做些笔记来帮助速查和回忆 贴一道两年前遇到的PL/SQL题,原题如下 表结构如下: create table t_money(id int ...

  5. 【c语言】输入一个4位数,求四位数中各位数相加之和

    <程序设计基础实训指导教程-c语言>杨莉 龚义建 科学出版社 ISBN 978-7-03-032846-5 p9 2.1.2 上机实训内容 [实训内容1] 编程实现:输入一个4位数,求4位 ...

  6. Java实现算法应用--水仙花数 水仙花数是一个3位数,每一位数的立方相加等于该数本身。

    Java实现算法应用–水仙花数 @author asus 水仙花数是一个3位数,每一位数的立方相加等于该数本身. 具体代码如下: package package6; /*** 算法应用--水仙花数* ...

  7. 数组两个整数相加 c语言,作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)...

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...

  8. C语言练习题:企业发放的奖金根据利润提成。利润 I 低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成

    企业发放的奖金根据利润提成. 利润 I 低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成, 高于10万元的部分,可提成7.5%: 20万到40万 ...

  9. C语言 16进制转化为10进制

    #include <stdio.h> #include <string.h> int fun(char *str) {char *s = str + 2;//跳过0Xint n ...

最新文章

  1. 计算机视觉中的自注意力
  2. 遗传算法解决01背包
  3. windows中安装Node.js-安装angular-cli
  4. ubuntu下安装vim失败
  5. React从入门到精通系列之(12)深入理解JSX
  6. 【linux】linux系统配置静态IP地址(超详细,手把手教会)
  7. javascript教程:console.log 详解
  8. php mysql英语在线考试系统+论文
  9. applyTo、renderTo 区别
  10. VS2010 保护视力 背景色设置
  11. 微信公众号开发:实人认证,活体人脸识别解决方案
  12. php如何采集,php采集入门教程,教你如何写采集
  13. 关于数据库表、视图、存储过程、函数、分区表等的创建使用
  14. 制作poster+香港打印流程
  15. 计算机系统怎么装到u盘启动不了,电脑开机就进入BIOS界面,设置了u盘启动准备从装系统但是进不了U盘,这些是为什么啊?...
  16. 小程序之仿小米商城Lite
  17. 常见的DNS记录类型有哪些?如何查询DNS解析记录?
  18. 大一计算机论文_大一计算机论文大纲模板范文 大一计算机论文提纲怎样写
  19. pytorch Tensor及其基本操作
  20. 网页使用百度地图后,只显示灰色框框(已解决)

热门文章

  1. CVPR2020论文介绍: 3D 目标检测高效算法
  2. mysql链接数据库properties_mysql 之通过配置文件链接数据库
  3. HarmonyOS 界面跳转以及界面跳转的同时传递参数
  4. Python TypeError: ‘int‘ object is not iterable
  5. Android 白天/夜间模式切换
  6. Duplicate class xxx
  7. shell 跟踪命令
  8. Introduction to Django(The Definitive Guild to Django)
  9. js中定义变量之②var let const的区别
  10. Activiti——流程变量(六)