博客主页 😑
学习笔记第六章 结构类型

Author:

公爵

©

Wordage:

共计 3287 字

needs:

约 1 分钟

Popular:

6 ℃

Created:

目 录

6.1 枚举

用枚举优化常量符号化,变得更加方便

  • enum 枚举类型名字{名字0,...,名字n};
  • Example 01:
#include <stdio.h> 
enum color{
    red,
    yellow,
    green
};
void f(enum color c);
int main(){
    enum color t = red;
    scanf("%d",&t);
    f(t);
    return 0;
}
void f(enum color c){
    printf("%d\n",c);
}

枚举量

  • 声明枚举量的时候可以指定值
enum color{
  red = 1,
  yellow,
  green = 5
};

枚举只是int

实际上很少用

6.2 结构体

声明结构类型

  • Example 01:
#include <stdio.h> 
struct date{
    int month;
    int day;
    int year;
};
int main(){
    struct date today;
    today.month = 03;
    today.day = 05;
    today.year = 2020;
    printf("%i-%i-%i",today.year,today.month,today.day);
    //%i表示有符号十进制整数 
    return 0;
}

声明结构的形式

  • 形式一:
struct point{
    int x;
    int y;
};
struct point p1,p2;     // p1和p2都是point里面有x和y的值
  • 形式二:
struct{
    int x;
    int y;
}p1,p2;// p1和p2都是一种无名结构,里面有x和y
  • 形式三:(推荐)
struct point{
    int x;
    int y;
}p1,p2;
// p1和p2都是point里面有x和y的值

结构变量

struct date today;
today.month = 03;
today.day = 05;
today.year = 2020;

image-20200306092007788

结构体的初始化

struct date today = {03,05,2020};

结构成员

today.day

结构运算

  • 赋值、取地址、传递函数参数
  • p1 = (struct point){5,10}; //相当于p1.x = 5,p1.y = 10;
  • p1 = p2; //相当于p1.x = p2.x; p1.y = p2.y;

image-20200306092110362

结构可作为函数参数

bool isLeap(struct date d);

结构指针作为参数

  • 指向结构的指针
struct date{
    int month;
    int day;
    int year;
}myday;
struct date *p = &myday;
(*p).month = 12;
p -> month = 12;

用->表示指针所指的结构变量中的成员

结构数组

struct date dates[100];
struct date dates[] = {{4,5,2005},{2,4,2005}};

结构中的结构

struct dateAndTime{
    struct date sdate;
    struct time stime;
}
  • Example 01:

image-20200306092200846

image-20200306092243437

Typedef

  • typedef 自定义数据类型

image-20200306092323697

  • typedef struct{
        int month;
        int day;
        int year;
    }Date;

    image-20200305211317278

    6.3 联合体

    union AnElt{
      int i;
      char c;
    }elt1,elt2;
    elt1.i = 4;
    elt2.c = 'a';
  • sizeof(union ...) = // sizeof (每个成员) 的最大值

    #include <stdio.h> 
    typedef union{
      int i;
      char ch[sizeof(int)];
    }Data;
    int main(){
      Data data;
      int i;
      data.i = 1234;
      for(i=0;i<sizeof(int);i++){
      //对于%02hhx,hhx已经以一个字节打印了,加上02限制,不够两位的补成两位。
      printf("%02hhX",data.ch[i]);
      }
      printf("\n");
      return 0;
共计 0 条评论,点此发表评论
萌ICP备20226257号 赣ICP备2022001242号-1 闽公网安备35020502000606号 本站已运行 253 天 10 小时 15 分 51统计 百度统计 本站由提供CDN加速服务 自豪地使用 Typecho 建站,并搭配 MyDiary 主题 Copyright © 2022 ~ 2022. 公爵书房 All rights reserved.
历史足迹
分类目录
  • 随笔
  • 知识
  • 分享
  • 书籍
  • 专栏
  • 笔记