枚举

主要用来定义符号量
image.png
image.png
image.png
image.png
image.png

结构体

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/807843/1604556128942-ab2280c2-2273-45c2-813d-8255c451b39f.png#align=left&display=inline&height=132&margin=%5Bobject%20Object%5D&name=image.png&originHeight=264&originWidth=804&size=131426&status=done&style=none&width=402)

结构声明的形式

三种定义方式

image.pngimage.pngimage.png
image.png

结构成员

image.png
出现在 . 左边的是结构的实例

结构运算

image.png

结构指针

image.png

代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct date
  4. {
  5. int month;
  6. int day;
  7. int year;
  8. };
  9. struct date today;
  10. int main()
  11. {
  12. struct date today;
  13. today = (struct date){07,31,2014};
  14. struct date day;
  15. struct date *pDate = &today;
  16. day = today;
  17. day.year = 2015;
  18. printf("Today'day is %i-%i-%i.\n",today.year,today.month,today.day);
  19. printf("The day' date is %i-%i-%i.\n",day.year,day.month,day.day);
  20. printf("address of today is %p\n",pDate);
  21. return 0;
  22. }

结构作为函数参数

image.png

输入结构

通过函数读入结构体参数,并将其赋值给结构体
image.png

  • 因为函数是传值的,所以无法改变传入结构体的值

image.png
解决方案一:定义无输入值的getStruct()函数,直接返回结构体
image.png
解决方案二:通过结构体指针将结构体带入函数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //定义结构体
  4. struct point
  5. {
  6. int x;
  7. int y;
  8. };
  9. //定义 结构体 指针函数 or 指针函数
  10. struct point* getStruct(struct point*);
  11. //输出函数,其参数为结构体的值
  12. void outPut(struct point);
  13. //打印函数,其参数为结构体的指针
  14. void print(const struct point *p);
  15. int main()
  16. {
  17. struct point y = {0,0};
  18. getStruct(&y);
  19. outPut(y);
  20. outPut(*getStruct(&y));
  21. print(getStruct(&y));
  22. return 0;
  23. }
  24. struct point* getStruct(struct point *p)
  25. {
  26. scanf("%d",&p->x);
  27. scanf("%d",&p->y);
  28. printf("%d,%d\n",p->x,p->y);
  29. return p;
  30. }
  31. void outPut(struct point p)
  32. {
  33. printf("%d,%d",p.x,p.y);
  34. }
  35. void print(const struct point *p)
  36. {
  37. printf("%d %d\n",p->x,p->y);
  38. }

结构数组

结构中的结构

image.png

嵌套的结构

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/807843/1604563563155-03310fd2-cefb-4989-8344-4aeb01e03c3a.png#align=left&display=inline&height=344&margin=%5Bobject%20Object%5D&name=image.png&originHeight=688&originWidth=1040&size=507049&status=done&style=none&width=520)

typedef

image.png

  • Data 替换了中间的所有的东西
  • image.png
  • image.png

联合

得到一个整数的各个字节
image.png
image.png
union的用处
image.png
image.png