C语言联合和枚举

联合体类型


union Un
{
  char a;
  int b;

};

和结构体类似。它也是由多个不同类型的成员构成。不同的是,联合体的成员共用一块空间。所以也叫共用体。

联合体的大小至少是最大成员的大小。是成员中最大对齐数的整数倍。

改变b的值也会改变a的值。

联合体不能同时取所有成员的值,而只能取其中一个。

枚举类型

enum color
{
  blue = 0,
  red = 1,
  yellow = 2
};
enum color s1 = blue;

枚举可以定义常量,枚举里面可以包含可能的全部取值。枚举中,定义完1个常量后,用逗号。

最后一个常量后面不跟逗号。

枚举有类型检查,有作用域,一次可以定义多个常量,便于调试,增加代码可读性。很多场景下适合用枚举而不是#define 

枚举的每一个成员都有默认值,第一到最后一个依次从0递增。如果中间某个成员定义为388(或某个数),后面的也依次递增(389...不再按照默认值)。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
malloc和calloc是C语言中用于动态内存分配的函数。 malloc函数用于向内存申请一块连续可用的空间,并返回指向这块空间的指针。它的参数是要分配的内存空间的大小,返回的是开辟空间的起始地址。如果开辟成功,则返回一个指向开辟好空间的指针;如果开辟失败,则返回一个NULL指针。malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。需要注意的是,malloc的返回值一定要做检查,以确保内存分配成功。另外,如果参数size为0,malloc的行为是未定义的,取决于编译器。为了释放和回收动态内存,C语言提供了另外一个函数free,其函数原型为void free(void* ptr)。\[3\] 而calloc函数也是用于动态内存分配的函数,它与malloc函数的区别在于,calloc函数在分配内存的同时会将内存中的每个字节都初始化为0。它的参数是元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。因此,calloc相当于p = malloc(); memset(p, 0, size);多了对内存的写零操作。需要注意的是,由于写零操作会降低效率,所以在大部分情况下,我们更倾向于使用malloc而不是calloc。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [C语言中malloc和calloc函数的区别](https://blog.csdn.net/seekOfKnowledge/article/details/122454806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [位段,枚联合以及动态内存](https://blog.csdn.net/qq_42006663/article/details/123326135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值