一、结构体介绍
结构体是自定义的一种类型,可以让程序结构更清晰
二、结构体定义
struct tag {
member-list
member-list
member-list
...
} variable-list ;
1、方式1,定义结构体并声明
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book;
2、方式2,分开定义和声明
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} ;
struct Books book;
3、方式3,使用typedef
typedef struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book_def;
book_def book;
其中Books可以省略,如下
typedef struct
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book_def;
book_def book;
三、结构体的访问
book.id = 100;
printf("%d",book.id);
strcpy(book.title,"C Programming");
printf("%s",book.title);
四、结构体数组
1、定义
typedef struct
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book_def;
book_def book[10];
2、访问
book[0].id = 100;
printf("%d",book[0].id);
strcpy(book[1].title,"C Programming");
printf("%s",book[1].title);
3、直接传递
book[2] = book[1];
五、结构体指针
1、定义
typedef struct
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book_def;
book_def *pbook;
book_def book;
2、操作
pbook = &book;
(*pbook).id = 10;
pbook->id = 20;
strcpy((*book).title,"C Programming");
strcpy(book->title,"C Programming");
六、实例
需求:我们串口发送是一个字节一个字节的,我们制定的协议如下:
一阵协议10个字节,放于buff[10]
byte0 byte1 0x5555起始
byte2 value1
byte3 byte4 value2
byte5 byte6 byte7 byte8 value3
byte9 0xff 停止
常规方法解析:
char value1;
short value2;
int value3;
value1 = buff[2];
value2 = (buff[3] << 8) + buff[4] ;
value3 = (buff[5] << 24) + (buff[6] << 16) + (buff[7] << 8)+buff[8];
printf("%d",value1);
printf("%d",value2);
printf("%d",value3);
结构体方法解析:
typedef struct
{
short start;
char value1;
short value2;
int value3;
char stop;
} value_def;
value_def *pvalue;
pvalue = (pvalue *)buff;//强制转换地址类型再给地址到指针
printf("%d",pvalue->value1);
printf("%d",pvalue->value2);
printf("%d",pvalue->value3);