C语言自学系列三_结构体_枚举与位字段

序上篇C语言自学系列二_结构体,中结构体还有两个特性需要补充枚举变量和字段,又是一个深夜希望明天能起得来吧。

#枚举

有时候你不想保存数字或者文本,而是想保存一组符号。如果你想记录一周中的七天时间,因为数值在可预料范围内,并且很好列举出来。所以有了枚举

定义与调用

1
2
3
4
5
6
7
8
9
10
11
12
方法一:
enum sex {man,woman,katoey};

enum sex kName = man;

方法二
typedef enum {
man,woman,katoey
} sex;

sex kName = man;

  • 结构与联合用分号分割,枚举用逗号分割
  • 枚举只能赋值定义在内的值

举个栗子趟个坑

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

typedef enum {
man,woman,katoey
} sex;

int main()
{
sex sex = man;
printf("%d\n",man);
}

枚举运行结果

如果我们换上一个枚举中未定义的值会有什么样情况呢?

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

typedef enum {
man,woman,katoey
} sex;

int main()
{
sex sex = test;//未定义此内容
printf("%d\n",man);
}

枚举错误结果展示

编译器会提示undeclared

先来一段官方解析位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间。含有位段的结构体(联合体)称为位段结构。采用位段结构既能够节省空间,又方便于操作。,在实际开发中第一次用到位和接触到位这个概念是在redis中的bitmap,它在统计活跃用户数等特定场景下的性能和成本惊艳到我

##定义与使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

typedef struct {
unsigned int low_pass_vcf:1;
unsigned int filter_coupler:1;
} synth;

int main()
{
synth test = {.filter_coupler=0};
printf("内容:%d\n", test.filter_coupler);

return 0;
}
  • 位声明unsigned int是教科书必要条件,网上也看到一些野路子说不一定int
  • 位声明冒号后的个数实际是二进制表达的最大区间

ps:总感觉位这种高端的东西停留在认知阶段,希望以后有时间可以尝试一番~

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~