黑马程序员————C语言——结构体、枚举、typedef

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、结构体

  1.概念

  在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型。

  数组:只能由多个相同类型的数据构成
  结构体:可以由多个不同类型的数据构成

  2.定义形式

   struct 结构体名{
   
    类型名1 成员名1;
   
    类型名2 成员名2;
   
    ……
   
    类型名n 成员名n;   
   
     };

   例如

// 定义结构体类型
    struct Person
    { // 里面的3个变量,可以称为是结构体的成员或者属性
        int age; // 年龄
        double height; // 身高
        char *name; // 姓名
    };

   3.使用方式

       1>先定义结构体类型,再定义变量

          struct Student {
          char *name;
          int age;
          };

          struct Student stu;

       2>定义结构体类型的同时定义变量

           struct Student {
           char *name;
           int age;
           } stu;

          结构体变量名为stu

       3>直接定义结构体类型变量,省略类型名

           struct {
           char *name;
           int age;
           } stu;

           结构体变量名为stu

      4.使用注意

        1>不允许对结构体本身递归定义

        2>结构体内可以包含别的结构体

        3>定义结构体类型,只是说明了该类型的组成情况,并没有给它分配存储空间,就像系统不为int类型本身分配空间一样。只有当定义属于结构体类型的变量时,系统才会分配存储空间给该变量
        4>结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列

      5.使用

         1>一般对结构体变量的操作是以成员为单位进行的,引用的一般形式为:结构体变量名.成员名

         2>如果某个成员也是结构体变量,可以连续使用成员运算符"."访问最低一级成员

         3>相同类型的结构体变量之间可以进行整体赋值

       6.实例

#include <stdio.h>

int main()
{
    struct Date
    {
        int year;
        int month;
        int day;
    };
    
    // 类型
    struct Student
    {
        int no; // 学号
        
        struct Date birthday; // 生日
        
        struct Date ruxueDate; // 入学日期
        
        // 这种写法是错误的
        //struct Student stu;
    };

    struct Student stu = {1, {2000, 9, 10}, {2012, 9, 10}};
    
    printf("year=%d,month=%d,day=%d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
    
    
    return 0;
}

二、枚举

    1.概念

   枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。

    2. 一般形式为:

        enum 枚举名 {枚举元素1,枚举元素2,……};

        enum Season {spring, summer, autumn, winter};

    3.定义方式

      1>先定义枚举类型,再定义枚举变量

          enum Season {spring, summer, autumn, winter};

             enum Season s;

      2>定义枚举类型的同时定义枚举变量

          enum Season {spring, summer, autumn, winter} s;

      3>省略枚举名称,直接定义枚举变量

          enum {spring, summer, autumn, winter} s;

     4.使用注意
        1> C语言编译器会将枚举元素(spring、summer等)作为整型常量处理,称为枚举常量。

        2> 枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。

             enum Season {spring, summer, autumn, winter};

            也就是说spring的值为0,summer的值为1,autumn的值为2,winter的值为3

        3> 也可以在定义枚举类型时改变枚举元素的值

             enum season {spring, summer=3, autumn, winter};

             没有指定值的枚举元素,其值为前一元素加1。也就说spring的值为0,summer的值为3,autumn的值为4,winter的值为5

三、typedef

         1.概念

     typedef关键字为各种数据类型定义一个新名字(别名)。

         2.实例

#include <stdio.h>

typedef int Integer;//将int定义为Integer,就可以用它来定义变量
typedef unsigned int UInterger;//将unsigned int定义为UIntergar
typedef float Float;

int main(int argc, const char * argv[]) {
    Integer i = -10;
    UInterger ui = 11;
    
    Float f = 12.39f;
    
    printf("%d  %d  %.2f", i, ui, f);
    
    return 0;
}

         3.typedef与结构体
            typedef struct MyPoint {
                 float x;
                 float y;
               } Point;

              //用typedef给结构体MyPoint起了个别名叫做Point,然后就可以用Point来定义结构体了

              //省略写法
            typedef struct {
                 float x;
                 float y;
               } Point;

            4.typedef与枚举类型

     

// 定义枚举类型
enum Season {spring, summer, autumn, winter};
// 给枚举类型起别名
typedef enum Season Season;

int main(int argc, const char * argv[]) {
    // 定义枚举变量
    Season s = spring;
    
    return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值