C语言之枚举、结构体

枚举、结构体

枚举 enum

  • 在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的.

  • 连续枚举变量可以被遍历, 不连续枚举变量可以使用switch进行有条件遍历.

  • enum相当用 #define 定义多个相关的宏.

  • 第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1;

  • 如果指定某个枚举成员的值, 其后续成员 等于 前一个成员值+1;

  • 定义与使用

// 1、先定义枚举类型,再定义枚举变量
// 定义(枚举类型时改变枚举元素的值:)
enum DAY
{
    
    
    MON = 1,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN
};

enum DAY day;

// 2、定义枚举类型的同时定义枚举变量
// enum DAY {
    
    
//     MON = 1,
//     TUE,
//     WED,
//     THU,
//     FRI,
//     SAT,
//     SUN
// } day;
  • 全部实例:
#include <stdio.h>
// 1、先定义枚举类型,再定义枚举变量
// 定义(枚举类型时改变枚举元素的值:)
enum DAY
{
    
    
    MON = 1,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN
};

int main()
{
    
    
    enum DAY day;
    day = MON;
    printf("%d\n\n", day);

    //在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的
    printf("遍历枚举元素:\n");
    for (int i = MON; i <= SUN; i++)
        printf("%d\n", i);
    puts("");

    /* 用户输入数字来选择颜色 */
    printf("今天是星期几: (1. MON, 2. TUE, 3. WED, 4.THU, 5. FRI, 6. SAT, 7. SUN): ");
    scanf("%u", &day);
    switch (day)
    {
    
    
    case MON:
        printf("今天是星期一.\n");
        break;
    case TUE:
        printf("今天是星期二.\n");
        break;
    case WED:
        printf("今天是星期三.\n");
        break;
    case THU:
        printf("今天是星期四.\n");
        break;
    case FRI:
        printf("今天是星期五.\n");
        break;
    case SAT:
        printf("今天是星期六.\n");
        break;
    case SUN:
        printf("今天是星期天.\n");
        break;

    default:
        printf("输入内容错误.");
        break;
    }

    return 0;
}

结构体

typedef 行为有点像 #define 宏,用其实际类型替代同义字。

  • 结构体的定义和声明

    • 1.定义结构体的后, 声明变量且赋值
#include <stdio.h>

// 定义结构体
struct Book
{
    
    
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
};

int main()
{
    
    
    // 声明变量并初始化
    struct Book book = {
    
    
        "The c programming language",
        "xxx",
        "Development Language",
        1024};

    printf("\ntitle : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n\n", book.title, book.author, book.subject, book.book_id);

    return 0;
}

等价于

  • 2.定义结构体时,直接声明变量且初始化
#include <stdio.h>

struct Book
{
    
    
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} book = {
    
    
    "The c programming language",
    "xxx",
    "Development Language",
    1024};
int main()
{
    
    
    printf("\ntitle : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n\n", book.title, book.author, book.subject, book.book_id);

    return 0;
}

// 另一种初始化方式
// Book book;
// strcpy(book.title, "The c programming language");
// strcpy(book.author, "xxx");
// strcpy(book.subject, "Development Language");
// book.book_id = 1024;
    1. typedef 为类型取一个新的名字。
#include <stdio.h>

// 为结构体取一个新名字
typedef struct
{
    
    
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} Book;
int main()
{
    
    
    Book book = {
    
    
        "The c programming language",
        "xxx",
        "Development Language",
        1024};

    printf("\ntitle : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n\n", book.title, book.author, book.subject, book.book_id);

    return 0;
}
  • 4.结构体做参数
#include <stdio.h>
#include <string.h>

// 定义结构体的同时声明变量且赋值
typedef struct
{
    
    
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} Book;

void printBook(Book book) // 参数等价于 struct Book book
{
    
    
    book.book_id = 1234;
    printf("\ntitle : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n\n", book.title, book.author, book.subject, book.book_id);
}

int main()
{
    
    
    Book book;
    strcpy(book.title, "The c programming language");
    strcpy(book.author, "xxx");
    strcpy(book.subject, "Development Language");
    book.book_id = 1024;

    printBook(book);

    printf("\ntitle : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n\n", book.title, book.author, book.subject, book.book_id);

    return 0;
}
  • 5.用结构体指针来改变结构体内容:
void printBook(Book book) // 参数等价于 struct Book book
{
    
    
    book->book_id = 1234; // 修改
    printf("\ntitle : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n\n", book->title, book->author, book->subject, book->book_id);
}

使用时传入地址:

printBook(&book);

git_push.sh本人资源建议尝试一下.

猜你喜欢

转载自blog.csdn.net/weixin_46372074/article/details/127013910
今日推荐