结构体是一种数据类型-----构造类型
struct 结构体名
 {
    成员列表
 };
1、struct                                      //结构体 类型 关键字
 2、结构体名                                //表明这个结构体类型的名称
 3、成员列表                                //来描述结构体类型中具体的一些数据
                                                     //成员变量
        
        
注意结束的}后面要有一个分号!!
 声明结构体类型
 struct studet
 {
     char name[20];
     char sex;
     int sno;
     float core;
 }
int main(void)
 {
     int a;
     //初始化方式:按照成员列表的对应方式依次初始化
          struct student s = {“xiaoming”,0,1110,99.5};
          
          结构体变量的引用:
          方法:
          结构体变量名.成员名       (这个.是结构体成员运算符)
          eg:s.name   //访问s中的name
    //打印
     printf("name = %s\n",s.name);   //访问s中的name
 }
 结构体变量不能整体的输入值
  eg:  scanf(“%d”,&s.sno);     因为.运算符的优先级高于&。所以不需要加括号
  
  注意: 在输入字符型数据的时候结尾的回车哟啊通过getchar()来吃掉它
  eg:  scanf(“%s”,&s.name);
        getchar();
        scanf(“%c”,&s.sex);
定义的方式:
 1、 先声明变量 再定义变量   
    //如上面的例子
    但不能再main中声明会出现错误
 2、 声明类型的同时定义变量:
    struct student
    {
        ...
    }s;
    
 3、 声明类型的同时定义变量 但是省略结构体的名
   suruct 
   {
       。。。
   }s;
   
   
   
   0.两个结构体运算符:
   
   .                //成员运算符
   方法:  
       结构体变量名 . 成员变量名
   
  ->             // 指向结构体成员运算符
   方法:
        结构体类型的指针 -> 成员变量名
   
   同一类型的结构体变量之间是可以相互赋值的
   通过结构体类ing的指针 也可以访问到结构体成员
   结构体类型既可以做函数形参,也可以做为返回值
   
   
   qsort(起始地址,元素个数,单个元素大小,排序规则)
   
   
  
  考点:
    结构体实际的大小并不等于结构体里数据类型大小的简单相加
  
  !注意!
    计算机存在效率问题
  
  
  内存对齐:
   结构体对齐规则:    //内存地址的对齐
   结构体对齐:
   1、在32位的平台上,默认都是按照4字节对齐的。
      在64位的平台上,默认都是按照8字节对齐的
   2、对于成员变量,
      各自在自己的自然边界上对齐。
       char --1字节
       short--2字节
       int  --4字节
   
   3、如果 成员变量中有比4字节大。此时整个结构体按照4字节对齐。
   4、如果 成员变量中没有比4字节大的,此时整个结构体按照最大的那个成员对齐。