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

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

3天内不再提示

深入分析C/C++ 结构体定义及应用

Q4MP_gh_c472c21 来源:CSDN技术社区 作者:FightingBoom 2021-06-28 15:10 次阅读

1 结构声明结构声明描述了一个结构的组织布局。举例如下:

struct tempA

{

char cvariableA; // char 类型的变量 cvariableA

int ivariableB; // int 类型的变量 ivariableB

float fvariableC; // float 类型的变量 fvariableC

char carrayA; // char 类型的数组 carrayA

};

下边依次对此结构进行解析:

1、struct

struct 是一个关键字,表明跟在其后的是一个结构;

2、tempA

tempA 是一个 可选的标记 ,但是在上述例子中,不能去掉,否则该结构没有作用的 “对象” ,不过可写成如下样式:

struct

{

char cvariableA; // char 类型的变量 cvariableA

int ivariableB; // int 类型的变量 ivariableB

float fvariableC; // float 类型的变量 fvariableC

char carrayA; // char 类型的数组 carrayA

}tempB;

tempA 这个标记,写与不写,主要有以下区别:

1、写了此标记,则可以在后续程序中使用此标记来引用该结构;

struct tempA book; // C 写法// C++允许在声明结构变量时,省略关键字struct

tempA book; // C++ 写法

2、如果不写此标记,则只引用该结构定义了一个变量,也就是一次性的,如果需要定义另外一个拥有相同元素的结构体变量,必须要全部重新再写一遍,不能直接引用 tempB 。

2 定义结构变量结构有两层含义,一层是 “结构布局” ,就是上边的结构声明。结构布局告诉编译器如何表示数据,但是它并未让编译器为数据分配空间(待确认,看参考的经验,利用 sizeof 还是有空间的)。

下一步是创建一个结构变量, 即是结构的另外一层含义,前边也有提到过,程序中实现如下:

struct tempA book; // C 写法

tempA book; // C++ 写法

但是如果打算多次使用此结构,就要使用带标记的形式,也就是必须要写 tempA ;或使用 typedef ,下边将讲一下 typedef 的用法。

3 typedef个人建议使用 typedef 时,把标记也写上,这样在 C 中,可以使用 typedef 定义的类型(tempB),在 C++ 中可以直接使用标记(tempA)。两个名字应该是不能一样的。

typedef struct tempA

{

char cvariableA; // char 类型的变量 cvariableA

int ivariableB; // int 类型的变量 ivariableB

float fvariableC; // float 类型的变量 fvariableC

char carrayA; // char 类型的数组 carrayA

}tempB;

使用 typedef 的好处有如下两点:

1、为经常出现的类型创建一个方便,易识别的类型名。

2、typedef 常用于给复杂的类型命名。

4 常见方法举例4.1 未用typedef先声明结构体类型,再定义结构变量

struct tempA

{

char cvariableA; // char 类型的变量 cvariableA

int ivariableB; // int 类型的变量 ivariableB

float fvariableC; // float 类型的变量 fvariableC

char carrayA; // char 类型的数组 carrayA

};

struct tempA book; // C 写法

tempA book; // C++ 写法

在声明类型的同时,定义结构变量

struct tempA

{

char cvariableA; // char 类型的变量 cvariableA

int ivariableB; // int 类型的变量 ivariableB

float fvariableC; // float 类型的变量 fvariableC

char carrayA; // char 类型的数组 carrayA

}book;

直接定义结构体类型变量(没有标记)

struct

{

char cvariableA; // char 类型的变量 cvariableA

int ivariableB; // int 类型的变量 ivariableB

float fvariableC; // float 类型的变量 fvariableC

char carrayA; // char 类型的数组 carrayA

}book;

4.2 使用typedef直接定义结构体变量,没有标记,但是可以使用此变量引用该结构体

typedef struct

{

char cvariableA; // char 类型的变量 cvariableA

int ivariableB; // int 类型的变量 ivariableB

float fvariableC; // float 类型的变量 fvariableC

char carrayA; // char 类型的数组 carrayA

}tempB;

tempB book; // C C++ 均可

推荐此方法,即定义标记,又定义结构体变量

typedef struct tempA

{

char cvariableA; // char 类型的变量 cvariableA

int ivariableB; // int 类型的变量 ivariableB

float fvariableC; // float 类型的变量 fvariableC

char carrayA; // char 类型的数组 carrayA

}tempB;

此时如果使用 C ,则可以使用 tempB ;如果使用 C++ ,则可以使用 tempA 或 tempB 。

5 总结除了上边讲的,还有一些其他的结构体初始化,结构体里边定义结构体等内容。但万变不离其宗,都可以参考文章开头的网址,里边讲的比较详细。这里只是简单做个总结。

后续我也会按文中推荐的标准来使用(用 typedef ,标记和结构变量都要),这样兼容性比较好,也使自己的代码有比较统一的风格。

编辑:jq

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

    关注

    114

    文章

    3630

    浏览量

    79513
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72892

原文标题:C/C++ 结构体定义及使用

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C/C++代码动态测试工具VectorCAST插桩功能演示#代码动态测试 #C++

    C++代码
    北汇信息POLELINK
    发布于 :2024年04月18日 11:57:45

    光耦合器的结构与原理解析

    本文将深入分析光耦合器的结构与原理,旨在为读者提供清晰而全面的了解。
    的头像 发表于 02-02 16:12 214次阅读
    光耦合器的<b class='flag-5'>结构</b>与原理解析

    求助,请问一个结构如何全部定义到 __attribute__ 区域?

    请问一个结构如何全部定义到 __attribute__ 区域? 例如我这里涉及到一些高速计算的缓存,计划将缓存数据存储到 __attribute__ 区域。 三个结构
    发表于 01-16 07:29

    深入分析运放的作用

    深入分析了4-20mA的运放选型、A/D基准电压对测量精度影响等问题。
    的头像 发表于 01-15 13:47 1447次阅读
    <b class='flag-5'>深入分析</b>运放的作用

    深入分析:大带宽竞争形势下同轴接入网的价值

    电子发烧友网站提供《深入分析:大带宽竞争形势下同轴接入网的价值.pdf》资料免费下载
    发表于 11-10 11:26 0次下载
    <b class='flag-5'>深入分析</b>:大带宽竞争形势下同轴接入网的价值

    什么是C++虚函数? 应该怎么定义? 用途是什么?

    什么是C++虚函数? 应该怎么定义? 主要用途是什么?
    发表于 11-08 06:58

    求助,结构变量定义引用问题求解

    |= mask; } 如以上语句,GPIO_Type是个结构定义定义了一个*base变量,在引用其中的成员时,是base->IMR的方式。这怎么理解; 如果是
    发表于 10-27 06:06

    C++程序设计精简版

    章 指针第 7 章 自定义数据类型 第 3 篇 基于对象的程序设计第 8 章 类和对象第 9 章 关于类和对象的进一步讨论第 10 章 运算符重载 第 4 篇 面向对象的程序设计第 11 章 继承与派生第 12 章 多态性与虚函数第 13 章 输入输出流第 14 章 C++
    发表于 10-09 07:26

    嵌入式C/C++语言精华文章集锦

    面对一个人的大型 C/C++程序时,只看其对 struct 的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的 C/C++程序,势必要涉及一些(甚至大量)进行数据组合的
    发表于 09-25 08:00

    PCE 1.0版自动配置的深入分析

    本教程详细介绍了平台配置编辑器(PCE)的不同功能,允许您为自定义目标创建合适的调试配置。 过去几年表明,目标的复杂性有所增加;这些往往混合了几种Arm架构,包括自定义IP,并拥有庞大的跟踪基础设施
    发表于 08-02 18:00

    如何为Arm编译Cc++代码

    编写CC++应用程序时,需要使用编译器工具链将其编译为机器代码。然后,您可以在基于Arm的处理器上运行此编译的可执行代码,或者使用模型对其进行模拟。 裸机编译编译器工具链包括以下组件: •将C
    发表于 08-02 17:28

    ARM C语言扩展规范

    ARM C语言扩展(ACLE)规范指定源语言扩展和实现C/C++编译器可以实现的选项,以便让程序员更好地利用ARM体系结构。 扩展包括:  提供关于目标体系
    发表于 08-02 06:27

    C++程式語言 第一章 1-3C++字串和Vector向量 - 第1节C++程式語言 第一章 1-3C

    编程语言C++
    充八万
    发布于 :2023年07月30日 03:08:19

    一起探索C++的世界!

    C++
    YS YYDS
    发布于 :2023年07月07日 19:10:25

    如何为xtensa编译C++

    我想为 xtensa 编译简单的 C++ 代码,但我不能。 代码:全选#include \"ets_sys.h\" #include \"osapi.h\"
    发表于 06-09 07:02