0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

结构体使用方法

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-09-28 15:43 次阅读

头文件的结构体的定义为:

typedef struct
{
u8bmRequestType;
u8bRequest;
u16wValue;
u16wIndex;
u16wLength;
}USB_Request_Header_t;

虽然粉丝最后都理解了,但是仍想趁着这个机会整理一下结构体的用法,希望能够对刚入行的童鞋们有所帮助。

结构体

在实际的开发过程中,一组数据往往具有不同的数据类型,此时数组是不能够满足需求了。因为数组中各元素的类型必须是一致的。为了解决这个需求,C中给出了另一种数据类型-结构体,每一个成员可以是任意一种数据类型。

定义一个结构体的类型为:

struct
结构名{
成员列表
};

其中struct后面的叫做结构体名,而struct 结构名叫做结构体类型,只有结构体类型才可以定义变量,结构体名是不能定义变量的。注意}后面是需要加;的。

struct

stu
{XXX};
stustu1;
//fail
struct stu

stu1
;
//true

三种结构体类型变量说明

结构变量有以下三种方式:

1、先定义结构,再定义结构变量

struct stu
{

int  age;
};
struct stu stu1;
//定义了变量stu1

2、定义结构体类型的同时说明变量

struct

stu
{

int
age;
}stu1;

3、直接说明结构变量

struct
{

int
age;
}stu1;

这种方法和第一种方法相比,就是省略了结构体名,而省略的结构体名,就无法组合结构体类型了,而无这种结构体类型,自然就不能再定义这种结构体类型的变量了。

这种结构体也被称为匿名结构体,即没有结构体名。匿名结构体通常作为结构体成员的一个变量去使用。如下:

struct

stu
{

int
age;

struct
{

int
month;
}birthday;
}stu1;
sut1.birthday.month=
10
;
//用法

结构体成员表示方法

struct

stu

stu1
,*
pstu1
;
pstu1=&stu1;
stu1.age=
10
;
//true
(&stu1)->age=
10
;
//true
pstu1->age=
10
;
//true
(*pstu1).age=
10
;
//true
*pstu1.age=
10
;
//fail

如果对变量访问成员,则使用.运算符,如果是对指针访问成员则使用->运算符。

上例中除了最后一个都是对的。因为.运算符的优先级高于*,所以会先执行pstu1.age,而pstu1是一个指针,不可以使用.运算符去访问,需要正确使用->运算符访问。所以最终会报错。

结构体指针做参数

struct

stu

stu1
;
void
 
fun
(structstu*val);
fun(&stu1);

在这里也有新手误解的地方,在函数入参这一块,传入的是一个指针,并不是说外部一定要先定义一个指针变量struct stu *xxx,然后把xxx传进去。就像下面一样。

struct

stu

stu1
;
struct

stu
*
p_stu1
=&
stu1
;
fun(p_stu1);

结构体初始化

定义变量的同时初始化

struct

stu
{

int
age;
}stu1={
18
};
先定义在初始化
struct

stu

stu1
,
stu2
;
stu1.age=
18
;
stu2=stu1;
//结构体之间可以直接赋值

常用初始化

在开发过程中,一个结构体之间会存在若干成员,极其复杂。这个时候通常是将成员全部清零,然后再对需要的成员进行构造。

struct

stu

stu1
;
memset
(&stu1,
0
,
sizeof
(stu1));
XXX_Init(&stu1.xxx);
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指针
    +关注

    关注

    1

    文章

    475

    浏览量

    70457
  • 结构体
    +关注

    关注

    1

    文章

    127

    浏览量

    10800
收藏 人收藏

    评论

    相关推荐

    C语言循环结构使用方法

    详细介绍了C语言while循环结构、do-while循环结构、for循环结构、循环退出语句的语法和使用方法
    发表于 11-02 11:26 1141次阅读
    C语言循环<b class='flag-5'>结构</b>的<b class='flag-5'>使用方法</b>

    C语言结构(struct)常见使用方法

    ,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。结构定义:第一种:只有结构
    发表于 08-23 18:18

    结构和指针如何结合

    一直没弄明白结构和指针的是使用方法,最近写多级菜单,参考了别人的程序,但是不能理解希望能有大神详细的解释一下!不胜感激。 void (*current_operation_index
    发表于 05-04 05:56

    如何使用struct kstat结构和vfs_stat()函数

    方法一:使用struct kstat结构和vfs_stat()函数,使用方法和功能类似于应用态的struct stat和stat()函数。举例:读取文件 struct kstat s
    发表于 08-05 07:21

    使用结构的主要作用

    2.在我们单片机程序开发过程中,经常会遇到要初始化一个外设比如串口,它的初始化状态是由几个属性来决定的,比如串口号,波特率,极性,以及模式。对于这种情况,在我们没有学习结构的时候,我们一般的方法...
    发表于 08-24 07:54

    振动测试系统组成及基本仪器使用方法简介

    激振器之振动测试系统组成及基本仪器的使用方法...(2015-09-20 03:48:41)标签:能够随时实验一 振动测试系统组成及基本仪器使用方法简介 一、 实验目的 1、了解结构振动控制实验装置
    发表于 09-10 07:13

    结构变量的定义与使用变量访问结构成员

    知识点回顾关于找最大公共子串的两种解题方法结构的定义(3种)结构变量的定义与使用变量访问结构
    发表于 12-17 07:10

    简单分析linux内核中的结构使用方法

    结构的使用并不熟练,导致在linux开发中一头雾水。下面简单分析结构使用方法。1:结构
    发表于 01-19 08:26

    关于结构的基本知识汇总

    什么是结构结构最常用的方法有哪几种呢?结构
    发表于 02-25 07:42

    示波器的使用方法

    数字万用表使用方法和示波器的使用方法详解。
    发表于 03-14 10:38 32次下载

    钳型表如何使用_钳型表使用方法图解大全

    本文介绍了什么是钳形表以及钳形表结构及原理,其次介绍了 钳形表使用要点与钳形表的使用方法图解,最后介绍了DT266型电流钳形表使用方法
    发表于 01-19 11:39 10w次阅读
    钳型表如何使用_钳型表<b class='flag-5'>使用方法</b>图解大全

    面包板的结构使用方法详细介绍

    面包板是实验室中用于搭接电路的重要工具,熟练掌握面包板的使用方法是提高实验效率,减少实验故障出现几率的重要基础之一。下面就面包板的结构使用方法做简单介绍。
    发表于 10-31 08:00 0次下载
    面包板的<b class='flag-5'>结构</b>和<b class='flag-5'>使用方法</b>详细介绍

    示波器的使用方法(三):示波器的使用方法详解

    示波器的使用方法并非很难,重点在于正确使用示波器的使用方法。往期文章中,小编对模拟示波器的使用方法和数字示波器的使用方法均有所介绍。为增进大家对示波器的
    的头像 发表于 12-24 20:37 2983次阅读

    AB结构胶胶水的使用方法及特性

    戈埃尔科技:AB结构胶胶水的使用方法和性能AB结构胶胶水是一种能承受强力的结构件粘接的高分子精细复合双组份型粘接材料,具有能承受较大负载高强度,在预期寿命内性能稳定。AB
    发表于 07-27 16:06 6209次阅读

    欧姆龙NX结构应用方法

    欧姆龙NX结构应用方法
    的头像 发表于 06-15 10:23 1061次阅读
    欧姆龙NX<b class='flag-5'>结构</b><b class='flag-5'>体</b>应用<b class='flag-5'>方法</b>