• 网络学院
  • 新手学堂
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
C语言程序设计基础之联合
广告位
  站点:
  • 首 页
  • 最新软件
  • 最新文章
  • 国内软件
  • 国外软件
  • 汉化软件
  • 源码下载
  • 字体下载
C语言程序设计基础之联合
软件发布 C语言程序设计基础之联合
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回首页 | 文章首页 | 编程技术 | C/C++教程 | C语言程序设计基础之联合

C语言程序设计基础之联合

 

添加时间: 2006-2-22 5:51:22  作者: C++教程  阅读次数:1121   来源: http://d9soft.com

 

 

        应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。如前面介绍的“单位”变量, 如定义为一个可装入“班级”或“教研室”的联合后,就允许赋予整型值(班级)或字符串(教研室)。要么赋予整型值,要么赋予字符串,不能把两者同时赋予它。联合类型的定义和联合变量的说明一个联合类型必须经过定义之后, 才能把变量说明为该联合类型。

  一、联合的定义

  定义一个联合类型的一般形式为:   

  union 联合名

  {

   成员表

  };

  成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 成员名的命名应符合标识符的规定。

  例如:   

  union perdata

  {

   int class;

   char office[10];

  };

  定义了一个名为perdata的联合类型,它含有两个成员,一个为整型,成员名为class;另一个为字符数组,数组名为office。联合定义之后,即可进行联合变量说明,被说明为perdata类型的变量,可以存放整型量class或存放字符数组office。
 二、联合变量的说明

  联合变量的说明和结构变量的说明方式相同, 也有三种形式。即先定义,再说明;定义同时说明和直接说明。以perdata类型为例,说明如下:   

  union perdata

  {

   int class;

   char officae[10];

  };

  union perdata a,b; /*说明a,b为perdata类型*/

  或者可同时说明为:   

  union perdata

  {

   int class;

   char office[10];

  }  

   a,b;或直接说明为:  

  union

  {

   int class;

   char office[10];

  }

  a,b

  经说明后的a,b变量均为perdata类型。 它们的内存分配示意图如图7—8所示。a,b变量的长度应等于 perdata 的成员中最长的长度, 即等于office数组的长度,共10个字节。从图中可见,a,b变量如赋予整型值时,只使用了2个字节,而赋予字符数组时,可用10个字节。

  联合变量的赋值和使用

  对联合变量的赋值,使用都只能是对变量的成员进行。 联合变量的成员表示为: 联合变量名.成员名 例如,a被说明为perdata类型的变量之后,可使用 a.class a.office 不允许只用联合变量名作赋值或其它操作。 也不允许对联合变量作初始化赋值,赋值只能在程序中进行。还要再强调说明的是,一个联合变量, 每次只能赋予一个成员值。换句话说,一个联合变量的值就是联合变员的某一个成员值。

[例7.15]设有一个教师与学生通用的表格,教师数据有姓名,年龄,职业,教研室四项。学生有姓名,年龄,职业,班级四项。

  编程输入人员数据, 再以表格输出。  

  main()

  {

   struct

   {

    char name[10];

    int age;

    char job;

    union

    {

     int class;

     char office[10];

    } depa;

   }body[2];

   int n,i;

   for(i=0;i<2;i++)

   {

    printf("input name,age,job and department\n");

    scanf("%s %d %c",body[i].name,&body[i].age,&body[i].job);

    if(body[i].job=='s')

     scanf("%d",&body[i].depa.class);

    else

     scanf("%s",body[i].depa.office);

   }

   printf("name\tage job class/office\n");

   for(i=0;i<2;i++)

   {

    if(body[i].job=='s')

     printf("%s\t%3d %3c %d\n",body[i].name,body[i].age,body[i].job,body[i].depa.class);

    else

     printf("%s\t%3d %3c %s\n",body[i].name,body[i].age,

     body[i].job,body[i].depa.office);

   }

  }

  本例程序用一个结构数组body来存放人员数据, 该结构共有四个成员。其中成员项depa是一个联合类型, 这个联合又由两个成员组成,一个为整型量class,一个为字符数组office。在程序的第一个for语句中,输入人员的各项数据,先输入结构的前三个成员name,age和job,然后判别job成员项,如为"s"则对联合depa·class输入(对学生赋班级编号)否则对depa·office输入(对教师赋教研组名)。

  在用scanf语句输入时要注意,凡为数组类型的成员,无论是结构成员还是联合成员,在该项前不能再加"&"运算符。如程序第18行中

  body[i].name是一个数组类型,第22行中的body[i].depa.office也是数组类型,因此在这两项之间不能加"&"运算符。程序中的第二个for语句用于输出各成员项的值。

 

 

 

上下文章:

 

上一篇文章: 学C++不得不看的一篇文章 下一篇文章: C++编程中的四个调试小技巧

相关文章:

  • ORACLE认证基础:ORACLE系统概述
  • 入门基础:连接常见错误及解决方法
  • 入门基础:认识OracleSQL内置函数
  • Oracle数据操作和控制语言详解
  • 入门基础:连接常见错误及解决方法

相关软件:

  • 易语言汉语编程环境 V4.10
  • C/C++程序设计学习与实验系统 V2008.10
  • RonyaSoft ProPoster 多语言版 V2.02.05
  • Visual Basic6.0 中文版语言手册+阅读器(WDL)
  • C++语言程序设计及应用实例 PDF电子书
  • 韩语轻松学--基础韩语 V2.0

 

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • C/C++作用域引申出的编码规范
  • 程序宝典:C++学习感想
  • C语言:黑客学员必修课(一)
  • C语言:黑客学员必修课(二)
  • 使用多线程实现数据实时采集
  • C++编程中的四个调试小技巧
  • C语言程序设计基础之联合
  • 学C++不得不看的一篇文章
  • C,曾经的程序员梦
  • 水滴石穿C语言之可变参数问题

C/C++教程阅读排行

  • 学C++不得不看的一篇文章
  • C语言:黑客学员必修课(一)
  • 水滴石穿C语言之可变参数问题
  • 程序宝典:C++学习感想
  • 我的Visual C++入门之路
  • 初学者学习C++的50条忠告
  • C++中的struct专题研究
  • C++箴言:只要可能就用const
  • 强大的语言——C入门
  • C++编程中的四个调试小技巧

编程技术阅读总排行

  • VB入门教程之一
  • 第二章 PowerBuilder 入门之创建新...
  • Java连接数据库实例
  • 第一章 什么是PowerBuilder
  • VC++之List Box/Check List Box控...
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有