枚举 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;
-
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本人资源建议尝试一下.