第十六天 C语言 结构体 共同体

结构体类型   

例:

struct Student
{
    int sno;
    char name[30];
    char sex;

    float score;
};

语法 
struct  结构体类型名
{
        成员列表
}
1.struct 关键字
表示  是在构造一个结构体的类型
2.结构体名
  用来 描述  结构体这个类型  一个名称
3  成员列表
 表示  要描述的复杂数据  中 用到的 具体的成员变量
多个成员变量之间,要用分号隔开
4最后 有一个 分号表示结束

注意
1.结构体类型的使用的过程
a.先定义出类型
b.定义变量
2定义变量
struct  结构体名   变量名
--------
结构体类型

结构体初始化:
struct  student  s = {}

初始化
看每个成员变量,具体是什么数据类型
根据每个成员变量 自身的数据类型,进行初始化
初始化顺序,按定义的顺序,依次初始化

结构体变量的引用

形式1 先定义类型,然后定义变量
struct demo
{
};
struct demo d;
形式2:定义类型的同时,定义变量
struct demo
{
}d;
形式3:定义类型的同时,定义变量,可以省略结构体名
struct 
{
}d;    //如果结构体只用一次可以这么用

结构体类型的大小
判断依据:内存对齐          
结构体对齐规则
1.在32位的平台上,默认都是按4字节对齐的。 
2.对于成员变量,
   各自在自己的自然边界上对齐。
   char  -- 1字节 
   short -- 2字节 
   int   -- 4字节 
3.如果 成员变量中有比4字节大。      
  此时 整个结构体 按照4字节对齐。 //32位的平台 
4.如果 成员变量中没有有比4字节大。  
  此时 整个结构体 按照最大的那个成员对齐。   
  //32位的平台   
  //如果有超过4字节 ,按照4字节对齐
  //如果没有超过4字节的,则按成员变量中最大对齐 
 ----------------------------------------------
  //64位的平台
  //如果超过4字节的,按超过的最大的成员变量对齐 
  //如果没有超过4字节的,则按成员变量中最大对齐
 

qsort(快速排序)

void qsort(
           void *base,    //要排序的数组的首地址 
           size_t nmemb,  //数组元素的个数 
		   size_t size,   //单个元素的大小 
           int (*compar)(const void *, const void *) //比较函数 --- 提供比较依据
		   );
 
//功能:对数组进行排序
//其中比较函数部分需要我们自己写出来,这是一个回调函数


void qsort(
       void *base,                       //要排的数组的首地址 
       size_t nmemb,                 //数组元素的个数
       size_t xiae,                      //单个元素的大小
       int (*compar)(const void *a,const void *b)        //比较函数——提供比较的依据,需要自己写
)

功能:排序数组

总结:
1.理解结构体概念及用途
2.使用方法
  a.自己构造出这个结构体类型
  b.类型使用:定义变量;定义数组;定义指针;做函数形参(结构体类型指针);做函数返回值
3.考点:结构体类型的大小计算

共用体:union
语法:
 union 共用体名
{
    成员变量;
};
eg:
union demo
{
    char a;
    short b;
    int c;
};

共用体:共用了一块内存空间,公用了最大成员的空间

注意:
1.共用体初始化时,只能给一个值,默认时给到第一个成员符。
2.共用体变量中的值,取决于最后一次给到的值,还有看能影响几个字节

union demo    //定义一个共用体类型
{
    int a;
    char b;
}
 
int main()
{
    union demo d;    //定义共用体变量
    
    d.a = 0x12345678;    //给a成员赋值
    d.b = 0xab;          //给b成员赋值
 
    printf("d.a = %#x\n",d.a);    //因为两个成员共用一块4个字节的空间
                                  //所有这块空间上存储的数据受最后一次赋值的影响
    return 0;                     //但是b成员只能影响一个字节,所有a的值为0x123456ab;
}

对比结构体
1.结构体中各个成员拥有自己独立空间
2.共用体中成员共用一块空间
                     

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值