c语言结构体的实例使用

一、结构体介绍
结构体是自定义的一种类型,可以让程序结构更清晰

二、结构体定义

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);
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值