A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cherrycool 中级黑马   /  2015-11-25 09:39  /  932 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、结构体

         在实际问题中,一组数据不会只有一种数据类型。例如,在员工信息表中,工号是整型,姓名是字符型,年龄是整型数据,工资是浮点数据。为了解决这个问题,C语言提供了一种新的数据类型-----“结构”(structure)。C语言具有丰富的数据类型。结构型、共用型和数组属于构造型数据,都是由若干个数据组合而成的,但结构型、共用型与数组不同之处在于它们可以用来处理不同的数据。C语言除了系统定义的数据类型之处,允许用户自己定义数据类型,结构体,共用体。

1.1、结构体类型的定义
结构体是由一批数据组合而成的一种新的数据类型。组成结构型数据的每个数据称为结构型数据的“成员”。这些成员可以具有不同的  数 据类型。由于结构体数据的成员类型不同,因此结构体要由用户在程序中自己定义。
结构体类型定义的一般形式为:
  1. struct  结构体名
  2. {
  3. 数据类型1  成员名1;
  4. 数据类型2  成员名2;
  5. 数据类型3  成员名3;

  6. 数据类型n  成员名n;
  7. };       //分号是必不可少的,它是结构体的一部分。
复制代码
对于结构体类型的定义需要做以下几点说明:
(1)结构体名是用户用于标识结构体成选取的标识符,必须符号标识符的命名规则。
(2)数据类型1…数据类型n,可以是任何一种数据类型,可以是基本类型说明符,也可以构造体类型说明符,也可是已经定义过的结构体名。
(3)成员名1…成员名n,是用户自己定义的标识符,用来标识该结构体所包含的成员名称。相当于变量定义中的变量名。
(3)结构体定义在括号后的分号是不可少的。
(4)如果成员名的前面有“*”,表示该成员是指针型;如果成员名后面有“[长度]”,表示该成员是数组型。
struct employee
{
        int number;
        char *name;        //定义成员名为name,数据类型为指
        char sex;
        float wage;           //定义成员名为wage
};
5)当某个结构体成员的数据类型是另一个结构体时,称为“嵌套结构体”。此时,作为成员数据类型的结构体的定义必须出现在本结构体定义之前。
(6)当结构体成员的数据类型选取了自身的结构体时,成员只能是本结构体的指针变量或者是结构体指针型数组,但不能是结构体变量或结构数组。
(7)结构体是一种数据类型,在定义结构体进,其成员并不分配内存。只有用“struct  结构体名”来定义该结构型的变量、数组以及指针变量时,以会分配内存。
1.2、结构体变量的定义和引用
结构体类型本身是一个数据类型,具体的数据,也不占用系统内存空间。当程序中已经定义了结构体时,就可以使用“struct  结构体名”作为数据类型符来定义处理这种结构体数据的变量、数组及指针等。
1.2.1、结构体变量的定义和初始化
1.先定义结构体,再定义结构体变量
这种方式的定义语句格式如下:
struct 结构体名{
        数据类型1  成员名1;
        数据类型2  成员名2;
        …
        数据类型n  成员名n;
};
        …

struct 结构体名 结构体变量名=初值;
2.在定义结构体的同时定义变量
这种方式的定义语句格式如下:
struct 结构体名
{
        数据类型1  成员名1;
        数据类型2  成员名2;
        …
        数据类型n  成员名n;

}结构体变量名=初值;
3.直接定义结构体类型变量
直接定义结构体类型变量是指在定义结构体时定义变量,并将结构体名省略。这种方式的定义语句格式如下:
struct
{
        int num;
        char name[20];
        char sex;
        int age;
        float wage;
}emp1={100001,”mayun”,’m’,40,100000000},                /*定义结构体变量并赋值*/

emp2={100002,”yangzhiyuan”,’m,45,200000000};
1.2.2、结构体变量的引用
在程序中使用结构体变量时,不能将其作为一个整体来使用。结构体中的成员可以当成一般的变量来使用,结构体变量的赋值、输入、输出、运算等都是通过结构体中的成员来实现的。结构体变量成员的引用方法如下:
结构体变量名.成员名
printf(“%d,%s”,emp1);

printf(“%d,%s”,emp1.num,emp1.name);
  1. <font face="宋体" size="3">struct BIRTH              /*定义员工出生日期的结构体*/
  2. {
  3.         int year;                        /*定义年*/
  4. int month;                   /*定义月*/
  5.         int day;                    /*定义日*/
  6. };
  7. struct employee
  8. {
  9.         int num;                                        /*定义员工工号*/
  10.         char name[10];                                /*定义员工姓名*/
  11.         struct BIRTH birthday;                /*该成员的数据类型是生日结构体*/
  12. }emp1={100001,”mayun”,{1964,9,10}},emp2;</font>
复制代码
如果是嵌套的结构型,其成员的引用方法如下:
外层结构体变量名.外层成员名.内层成员名
上例中,如果要引用员工的出生日期,表示如下:
emp1.birthday.year
emp1.birthday.month
emp1.birthday.day
对于结构体变量的引用进行以说明:
(1)结构体变量的成员可以是任何类型,对该成员的操作与相同类型的普通变量并无区别,但需要在成员名前缀以结构体变量名。
(2)结构成员变量的使用与普通变量没有区别,因此可根据类型进行相应的运算。
(3)如果成员本身又是一个结构体时,必须逐级找到最低一级的成员才能使用。
(4)可以使用成员的数据,也可以使用成员的地址。结构体变量的地址是可以使用的,结构体变量的使用主要要为结构体变量成员的引用、结构型变量成员地址的引用及结构型变量地址的引用。

(5)允许将一个结构变量直接赋值给别一个具有相同结构的结构体变量。




2 个回复

倒序浏览
总结的不错
回复 使用道具 举报
自学看视频什么的印象不会很深刻的,把笔记自己整理一遍,然后在写一写代码,会对知识点理解的更加透彻
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马