码迷,mamicode.com
首页 > 编程语言 > 详细

11、C语言之结构体和共用体

时间:2018-03-26 12:29:35      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:用途   指针的使用   定义   不同   include   core   顺序   类型   char   

一、结构体

  结构体:是一种自定义构造数据类型

  用途:把不同类型的数据组合成一个整体。

    结构体类型定义:

    struct [结构体名]

   {

      类型识别符  成员名;

      类型识别符  成员名;

      ……

    };(记住分号不可少)

    eg:

    struct student

   {

      int num;

      char name[20];

      char sex;

      int age;

      float score;

      char addr[20];

    }stu1,str2;(stu1,stu2为结构体变量)

  说明:

    结构体类型与结构体变量概念不同

      类型:不分配内存     变量:分配内存;

      类型:不能赋值、存取、运算  变量:可以;

    结构体变量中的成员可单独使用,方法如普通变量;

    结构体可嵌套;

      eg:

        struct date

        {

          int month;

          int day;

          int year;

        };

        struct student

        {

          int num;

          char name[20];

          struct date birthday;

        }stu;

    结构体成员名与程序中变量名可相同,两者不代表同一个对象。

 

    结构体变量的引用:

    引用规则

      结构体变量不能整体引用,只能引用变量成员

        结构体变量名.成员名。

        stu.age = 20;

  结构体的正确用法:

 1 #include<stdio.h>
 2 void main()
 3 {
 4     struct student
 5     {
 6         int No;
 7         float score;
 8         char name[20];
 9     }stu;
10     scanf("%d,%f,%s",&stu.No,&stu.score,&stu.name);
11     printf("%d,%2.2f,%s",stu.No,stu.score,stu.name);
12 }

  结构体初始化的方式:

  (1)struct 结构体名

    {

      类型标识符  成员名1;

      类型标识符  成员名2;

    };

    struct 结构体名 结构体变量={初始化数据};  

   (2)struct 结构体名

      {

        类型标识符  成员名1;

        类型标识符  成员名2;

      }结构体变量={初始化数据};

   

  结构体数组:

  具有相同结构的结构体也可以组成数组

  定义结构体数组:三种形式

   (1)间接定义

    struct student

    {

 

      int num;

 

      char name[20];

 

      int age;

      char sex;

 

    };

 

    struct student stu[2];

  指向结构体类型数据的指针

    存放结构体首地址

    结构体的运算按照C语言的地址运算原则进行,  

    例如,结构指针加1,将指向内存中下一个结构体

    指向结构体变量的指针

    定义形式:  struct 结构体名  *结构体指针名;

struct student
{
    int num;
    char name[20];
    char sex;
    int age;
}stu;
struct student *p = &stu;

   结构体变量指针的使用,以下三种形式时等价的:

    stu.num = 101;

    (*p).num=101;//括号不能少

    p->num=101;

  用法举例:

 1 #include<stdio.h>
 2 #include<string.h>
 3 void main()
 4 {
 5     struct student
 6     {
 7         long int num;
 8         char name[20];
 9         char sex;
10         float score;
11     }stu_1,*p;
12     p=&stu_1;
13     stu_1.num = 89001;
14     strcpy(stu_1.name,"lilei");
15     (*p).sex = M;
16     p->score = 89.5;
17     printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n",(*p).num,p->name,stu_1.sex,p->score);
18 }

 

二、共用体

  共用体概念:

    构造数据类型,也叫联合体

    用途:使几个不同类型的变量共占一段内存(相互覆盖)

    类型定义形式:

      union 共用体名

      {

        类型标识符  成员名;

        类型标识符  成员名;

      };

      eg:

      union data

      {

        int i;

        char ch;

        float f;

      }a,b,*p,d[3];(与结构体类似)

    说明:共同体变量任何时刻只有一个成员存在。共用体变量定义分配内存,长度=最长成员所占字节数

  共用体变量的引用方式

    三种方式等价:

      共用体变量名.成员名

      共用体指针名->成员名

      (*共用体指针名).成员名

  共用体类型数据的特点:

    (1)同一个内存段可以用来存放几种不同的成员,但在每一瞬间,只能存放其中一种,而不是同时存放几种

    (2)共用体变量中起作用的成员是最后一次存放的成员

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

三、枚举类型

  枚举类型时ANSI C新标准所增加的。

  如果一个变量只有几种可能的值,可以定义为枚举类型。所谓枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。

  枚举类型及其变量的定义形式:

    enum 枚举类型名 {枚举元素列表} 枚举变量列表;

    可以先声明类型再定义变量,或同时进行或直接定义变量。

      eg:

        enum weekday {sun,mon,tue,wed,thu,fri,sat};

        enum weekday workday,week_end;

        或

        enum weekday  {sun,mon,tue,wed,thu,fri,sat} workday,week_end;

      其中,sun,mon……sat等为枚举元素或枚举常量。它们时用户定义的标识符。

      说明:

        在编译时,对枚举元素按常量处理,它们不是变量,不能对他们赋值。

        枚举元素作为常量,它们时有值的,语言编译按定义时的顺序使他们的值为0,1,2……

        枚举值可用用来做判断比较:

          eg:

            if(workday == mon)……

            if(workday >sun)……

        一个整数不能直接赋给一个枚举变量,应该先进行强制类型转换才能赋值。

          eg:workday = (enum weekday)2;

 

四、用typedef定义类型

  功能:用自定义名字为已有数据类型命名

  类型定义简单形式:typedef type name;

    type:已有数据类型

    name:给type定义的别名

  说明:

    1、typedef没有创造新数据类型

    2、typedef时定义类型,不能定义变量

    3、typedef与define不同

  typedef定义类型步骤:

    1、按定义变量方法写出定义体  如 int i;

    2、将变量名换成新类型名            int INTERGER;

    3、最前面加typedef             如typedef int INTERGER

    4、用新类型名定义变量  如 INTERGER i,j;

  类型定义可以嵌套

 

11、C语言之结构体和共用体

标签:用途   指针的使用   定义   不同   include   core   顺序   类型   char   

原文地址:https://www.cnblogs.com/Long-w/p/8649785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!