您的位置:首页 > 其它

结构体struct and 联合体 union

2009-11-05 10:31 375 查看
在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为
整型或实型。显然不能用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一
种构造数据类型——“结构(structure)”或叫“结构体”。
它相当于其它高级语言中的记录。“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一
种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。

让编程序的人自定义一个数据类型。 共用体是在同一存储空间上存不同类型的数据,用于节省空间

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。

 
 在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言
中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构
体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展,C++的结构体可以包含函
数,这样,C++的结构体也具有类的功能,与class不同的是,结构体包含的函数默认为public,而不是private。

  C++控制台输出例子:

  #include <cstdlib>

  #include <iostream>

  //定义结构体

  struct point

  {

  //包含两个变量成员

  int x;

  int y;

  };

  using namespace std;

  int main(int argc, char *argv[])

  {

  point pt;

  pt.x=1;

  pt.y=2;

  cout<<pt.x<<endl<<pt.y<<endl;

  return EXIT_SUCCESS;

  }

、、、、、、、、、、、、、、、、、、、

联合体(union)

在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。

一般定义形式

  union 共用体名

  {

  成员表列

  }变量表列;

简单示例

  union data

  {

  int i;

  char ch;

  float f;

  }a,b,c;

[编辑本段]共用体变量的引用方式
  只有先定义了共用体变量才能在后续程序中引用它,有一点需要注意:不能引用共用体变量,而只能引用共用体变量中的成员。

简单示例

  union data

  {

  int i;

  char ch;

  float f;

  }a,b,c;

  对于这里定义的共用体变量a,b,c。下面的引用方式是正确的:

  a.i (引用共用体变量中的整型变量i)

  a.ch (引用共用体变量中的字符变量ch)

  a.f (引用共用体变量中的实型变量f)

  而不能自引用共用体变量,例如:

  printf("%d",a); <==这种用法是错误的。

  因为a的存储区内有好几种类型的数据,分别占用不同长度的存储区,近些共用体变量名a,难以使系统确定究竟输出的是哪一个成员的值。

  而应该写成

  printf("%d",a.i); 或 printf("%c",a.ch);

[编辑本段]共用体类型数据的特点
  1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。

  2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。

  3.共用体变量的地址和它的各成员的地址都是同一地址。

  4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,并且,不能在定义共用体变量时对它进行初始化。

  5.不能把共用体变量作为函数参数,也不能是函数带回共用体变量,但可以使用指向共用体变量的指针。

  6.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: