Chinaunix首页 | 论坛 | 博客
  • 博客访问: 414305
  • 博文数量: 101
  • 博客积分: 2324
  • 博客等级: 大尉
  • 技术积分: 887
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-19 19:28
文章分类

全部博文(101)

文章存档

2012年(3)

2011年(60)

2010年(38)

分类: C/C++

2011-03-25 09:27:49

                              结构体与共用体
1.定义
  在实际问题中,一组数据往往具有不同的数据类型。因为数组中各个元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,c语言给出了另一种构造数据类型--“结构(structure)”或叫“结构体”。
  一般形式:
            struct 结构体
              {成员列表};
  成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:       类型说明符 成员名;
  成员名的命名符合标识符的书写规定。例如:

struct stu
{
 int num;
 char name[20];
 char sex;
 float score;
}


在这个结构定义中,结构名为stu,该结构由4个成员组成。结构定义之后,即可进行变量说明。凡说明为结构stu的变量都由上述4个成员组成。
2. 结构类型变量的说明
  说明结构变量有以下三种方法
 1)先定义结构,再说明结构变量
    如:

struct str
{
 int num;
 char name[20];
 char sex;
 float score;
};
struct stu dd1,dd2;
说明了两个变量dd1,dd2为stu结构类型。也可以用宏定义使一个符号常量来表示一个结构类型。
例如:
    #define STU struct stu
STU
{
 int num;
 int name[20];
 char sex;
 float score;

};
STU boy1,boy2;



2)在定义结构类型的同时说明结构变量
  例如:
  struct stu
  {
    int num;
    char name[20];
    char sex;
    float score;
  }boy1,boy2;
  其格式为:
   struct 结构名
   {
     成员表列
   }变量名表列;
3)直接说明结构变量
   例如:
 

struct
{
 int num;
 char name[20];
 char sex;
 float score;
}boy1,boy2;
这种格式:
         struct
         {
        成员列表
         }变量名表列;

成员也可以又是一个结构,即构成了嵌套的结构。
例如:

struct date
{
 int month;
 int day;
 int year;
};
struct{
 int num;
 char sex;
 struct date birthday;
}boy1,boy2;


3.结构变量成员的表示方法
  表示结构变量成员的一般形式是:
  结构变量名.成员名
 例如:
 boy1.num
 boy2.sex
 boy1.birthday.month
4.结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来完成。
5.结构变量的初始化
  例子:
 
 

和其他类型变量一样,对结构变量可以在定义时进行初始化赋值。
main()
{
  struct{
  int num;
  char *name;
  char sex;
  float score;
}boy1;boy2={102."asdfsd",'F',45.3};
boy2=boy1;
 printf("Num=%d\nName=%s\n",boy2.num,boy2.name);
}


6.结构体和共用体
  结构体是各成员长度之和,而共用体是最长成员的长度,也就是同一时刻只能有一个成员在内存驻存。结构体主要用于处理数组不能处理不同数据类型的组合,而结构体可以包含不同类型的数据。共用体的使用是为了节约内存和一些巧妙方法的实现。
例子:
    

struct ABC
{
 int a;
 short b;
 char c;
};
union ABC
{
 int a;
 short b;
 char c;
}
对于structABC来说内存分配如下:
x1 x1到x4 是int a;
x2
x3
x4
x5 x5 x6 是shortb;
x6
x7 x7是char c;
共7B
union ABC内存布局如下:
x1 x1到x4是int a; x1 x2是short b; x1是char c;
x2
x3
x4
x5
共 4B 共用体计长度最长的


}


阅读(570) | 评论(0) | 转发(0) |
0

上一篇:指针

下一篇:位运算

给主人留下些什么吧!~~