typedef和结构体

:fleur_de_lis: typedef ,结构体,结构体的标签等问题,一文说明。文中用代码示例说明了typedef和结构体在实际中的应用。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <string.h>

/* 结构体 struct 标签为 Books
* typedef 为 用户自定义数据类型 (就是下面的结构体)起一个别名,叫 Book
* typedef 还为指向结构体(Boos)的指针起了个别名,叫 BookPointer,
* 是指针类型,所以前面加了“ * ”号(指针运算符),可以用它来定义 指向结构体的指针。
*/
typedef struct Books
{
char title[50];
char author[50];
char subject[50];
int book_id;
} Book,*BookPointer;

int main()
{
// 结构变量的使用
Book book;
// 结构体 struts 标签的使用
struct Books book_s;

// 字符串复制函数 strcpy,
// 如下例,将 "book_s标题" 赋值给结构体 book_s 的 title 属性
strcpy(book_s.title, "book_s标题");
strcpy(book_s.author, "book_s作者Felix CAI");
strcpy(book_s.subject, "book_s编程语言");
book_s.book_id = 12340;

strcpy(book.title, "C 语言回忆");
strcpy(book.author, "Felix CAI");
strcpy(book.subject, "编程语言");
book.book_id = 56789;

/* 利用刚刚起的别名,定义一个指针,结构变量 Book 的地址赋值给它
* “ & ” 是地址运算符,&book 的值为结构变量 Book 的内存地址。
*/
BookPointer myBookPointer = &book;
// 利用结构体标签定义的指针,指向结构体类型的数据
struct Books *BookPointers = &book_s;
printf("myBookPointer的id : %d\n", myBookPointer->book_id);
printf("BookPointers : %d\n", BookPointers->book_id);
printf("\n");
printf("书标题 : %s\n", book.title);
printf("书作者 : %s\n", book.author);
printf("书类目 : %s\n", book.subject);
printf("书 ID : %d\n", book.book_id);
printf("\n");
printf("book_s书标题 : %s\n", book_s.title);
printf("book_s书作者 : %s\n", book_s.author);
printf("book_s书类目 : %s\n", book_s.subject);
printf("book_s书 ID : %d\n", book_s.book_id);

return 0;
}

输出

1
2
3
4
5
6
7
8
9
10
11
12
myBookPointer的id : 56789
BookPointers : 12340

书标题 : C 语言回忆
书作者 : Felix CAI
书类目 : 编程语言
书 ID : 56789

book_s书标题 : book_s标题
book_s书作者 : book_s作者Felix CAI
book_s书类目 : book_s编程语言
book_s书 ID : 12340