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

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

    关注

    117

    文章

    3849

    浏览量

    85472
  • C++
    C++
    +关注

    关注

    22

    文章

    2131

    浏览量

    77387

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C++与lua联合编程

    。 为什么 Lua 官方坚决拒绝使用复杂的 C++ 结构直接映射,而坚持使用连续的栈数组?因为连续内存是 CPU 缓存最友好的形态。深度理解栈机制的开发者知道,在 C++ 端批量处理
    发表于 04-19 16:27

    keil实现cc++混合编程

    参考touchgfx生成的代码,发现了一个不需要添加--cpp11 参数的解决方法,具体操作如下。 一、创建一个空白的C文件和头文件在头文件中定义c++文件中需要调用的函数,如图所示 二、在
    发表于 01-26 08:58

    10个例子代码,C语言结构的高级

    当涉及到C语言结构的高级**时,有很多有趣和强大的技巧可以应用。下面是10个例子代码,每个例子都使用了不同的高级结构技术,包括位字段、嵌
    发表于 01-05 06:32

    C语言与C++的区别及联系

    是面向过程语言,而C++是面向对象语言。说CC++的区别,也就是在比较面向过程和面向对象的区别。 1、面向过程和面向对象的区别 面向过程:面向过程编程就是分析出解决问题的步骤,然
    发表于 12-24 07:23

    结构声明与定义

    一样,去声明我们的结构体操作,但是C语言中规定,声明结构变量的时候,struct关键字是不可少的。 struct 结构
    发表于 12-11 07:52

    CC++之间的联系

    1、语法兼容性: C++完全兼容C语言的语法,这意味着任何有效的C语言程序都可以直接在C++编译器下编译通过。 2、底层控制: C++
    发表于 12-11 06:51

    C语言和C++之间的区别是什么

    (inheritance)、多态(polymorphism)等面向对象编程概念。程序员可以通过定义类来创建对象,并利用类的实例进行操作。 2、类型系统与安全性: C++具有更为严格的类型检查机制
    发表于 12-11 06:23

    C/C++条件编译

    条件编译是一种在编译时根据条件选择性地包含或排除部分代码的处理方法。在 C/C++ 中,条件编译使用预处理指令 #ifdef、#endif、#else 和 #elif 来实现。常用的条件编译指令有
    发表于 12-05 06:21

    C语言结构使用

    型的数据组合。 结构的声明与定义 结构的声明一般形式为: c struct
    发表于 11-12 08:30

    C/C++代码静态测试工具Perforce QAC 2025.3的新特性

     Perforce Validate 中 QAC 项目的相对/根路径的支持。C++ 分析也得到了增强,增加了用于检测 C++ 并发问题的新检查,并改进了实体名称和实
    的头像 发表于 10-13 18:11 741次阅读
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代码静态测试工具Perforce QAC 2025.3的新特性

    定义IO初始化结构

    由上述IOPORT相关功能的枚举类型我们可以知道,在对IOPORT模块进行初始化时需要根据情况配置它们。因此我们定义一个IOPORT初始化的结构类型IOPORT_Init_t,它的成员包括了由上述所有枚举类型所声明的变量,因此
    的头像 发表于 07-16 16:26 1573次阅读

    《ESP32S3 Arduino开发指南》第三章 C/C++语言基础

    基础,由于篇幅有限,在此仅对C/C++语言基础进行简单介绍。本章将分为如下9个小节:3.1 数据类型3.2 运算符3.3 表达式3.4 数组3.5 字符串3.6 注释3.7 顺序结构3.8 选择
    发表于 06-10 09:20

    VirtualLab应用:亚波长结构偏振光栅的深入分析

    性和热稳定性是至关重要的,该方法比传统的基于双折射晶体或多层系统的方法具有明显的优势。 在本周的时事通讯中,我们对快速物理光学建模和设计软件虚拟实验室融合中的这种结构进行了详细的分析,使用了文献[J.
    发表于 05-26 08:45

    主流的 MCU 开发语言为什么是 C 而不是 C++

    在单片机的地界儿里,C语言稳坐中军帐,C++想分杯羹?难喽。咱电子工程师天天跟那针尖大的内存空间较劲,C++那些花里胡哨的玩意儿,在这儿真玩不转。先说内存这道坎儿。您当stm32f4的256kRAM
    的头像 发表于 05-21 10:33 1213次阅读
    主流的 MCU 开发语言为什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    程序设计与数据结构

    的地址)出发,采用推导的方式,深入浅出的分析了广大C程序员学习和开发中遇到的难点。 2. 从方法论的高度对C语言在数据结构和算法方面的应用
    发表于 05-13 16:45