C语言概念——自定义数据类型(结构体)

一.自定义数据类型:
   C语言允许程序员自己定义符合实际需要的数据类型,一旦这些类型被定义后,
   则可以和基础类型一样使用;

   1. 结构体类型:
       作用: 用于存储多个不同类型的数据;简单来说,就是将多个不同基础类型的数据
              组织成一个完整的类型

      1.1 定义格式:

             struct  结构体名
         { 
              成员列表;
         };

     注意事项: 1. struct 和 结构体名 共同代表结构体类型 
                2. 结构体可以嵌套定义,


     例子:  struct  student
             {
                 int num; 
             char name[20];
             char sex;    
             int age;  
             float  score;
             int char addr[30];

             struct  birth
             {
                int year;
                int month;
                int day;
             }birthday;
         };

    1.2  结构体变量定义:

          1)  结构体类型定义完成后,利用该类型定义变量:
              
           struct  类型名    变量列表;

                    例如: struct  student   stu1,stu2;

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

                     struct  结构体名
             { 
              成员列表;
             }变量列表;

            例子: 
              struct  student
                  {
                 int    num; 
             char   name[20];
             char   sex;    
             int    age;  
             float  score;
             char   addr[30];
              }stu1,stu2;

                       num = 890;          error
               stu1.num  = 8090;   success

        3)  定义无名结构体类型的同时定义变量;

                 struct 
             { 
              成员列表;
             }变量列表;

           无名结构体只能在定义时定义变量,此外我们就无法再次根据 结构体类型 去定义其他变量了
           因为结构体是无名的,则相当于也就没有类型了;

        4)  也可以定义结构体数组,指针变量;

                 struct  类型名    数组名[数组大小];
             struct  类型名    *指针名;

    注意事项: 1. 结构体其实相当于一个数组,只是说结构体中存放的数据类型可以不同;
               2. 结构体变量不能整体访问,但同类型的结构体变量可以相互赋值;
           3. 结构体变量是不能直接使用运算符:  + - * /   <    >   ==      等

    1.3  结构体成员的访问:

           结构体变量名.成员名
           结构体指针名 ->  成员名

    1.4  结构体变量的初始化
          
          结构体变量可以在定义的同时初始化;

                  struct  student
                  {
                 int    num; 
             char   name[20];
             char   sex;
              };

          1) 给全部成员赋初值:
                例子: 
                  struct  student   stu = {10067,"peter",'M'};
          2) 给部分成员赋初值:(未被初始化的成员,如果是数值类型,则初始化为0,字符类型,初始化为'\0')
                例子: 
                  struct  student   stu = {10067};
          3) 给指定成员赋初值(未被初始化的成员,如果是数值类型,则初始化为0,字符类型,初始化为'\0')
               例子: 
                  struct  student   stu = { 
                                         .name = "lucy";
                                      };
    1.4  结构体数组和指针变量

    1.5  结构体求大小

          规则   1.成员按照自身的对齐值对齐:如果不在对齐边界,编译器会在加上填充字节
                     2.结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会
               在最末一个成员之后加上填充字节(trailing padding)


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值