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

    文章

    3782

    浏览量

    80990
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73607

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

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

收藏 人收藏

    评论

    相关推荐

    同样是函数,在CC++中有什么区别

    ,即使没有数据返回,也得写 void。 第二个函数名。 C语言的函数名绝对不能重名,除了用上 weak 这样的黑科技。同一个项目中,函数重名就会提示重复定义C++因为函数重载的存在,函数名可以相同,只要参数有区别就行。这两个
    的头像 发表于 11-29 10:25 251次阅读

    C语言和C++结构的区别

    同样是结构,看看在C语言和C++中有什么区别?
    的头像 发表于 10-30 15:11 185次阅读

    C7000优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    <b class='flag-5'>C</b>7000优化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>编译器

    C++语言基础知识

    电子发烧友网站提供《C++语言基础知识.pdf》资料免费下载
    发表于 07-19 10:58 7次下载

    C++中实现类似instanceof的方法

    C++有多态与继承,但是很多人开始学习C++,有时候会面临一个常见问题,就是如何向下转型,特别是不知道具体类型的时候,这个时候就希望C++ 可以向Java或者Python中有instanceof这个
    的头像 发表于 07-18 10:16 569次阅读
    <b class='flag-5'>C++</b>中实现类似instanceof的方法

    Perforce静态代码分析专家解读MISRA C++:2023®新标准:如何安全、高效地使用基于范围的for循环,防范未定义

    MISRA C++:2023——MISRA® C++ 标准的下一个版本来了!为了帮助您了解 MISRA C++:2023相比于之前版本的变化,我们将继续为您带来Perforce首席技术支持工程师
    的头像 发表于 06-18 12:57 408次阅读

    嵌入式中C语言结构基本实现

    C语言中的数组只能允许程序员定义存储相同类型数据。但是结构C语言编程中允许您存储不同数据类型的数据。 结构
    的头像 发表于 05-11 08:49 1008次阅读
    嵌入式中<b class='flag-5'>C</b>语言<b class='flag-5'>结构</b><b class='flag-5'>体</b>基本实现

    鸿蒙OS开发实例:【Native C++

    使用DevEco Studio创建一个Native C++应用。应用采用Native C++模板,实现使用NAPI调用C标准库的功能。使用C标准库hypot接口计算两个给定数平方和的平
    的头像 发表于 04-14 11:43 2580次阅读
    鸿蒙OS开发实例:【Native <b class='flag-5'>C++</b>】

    C语言结构史上最详细的讲解【软件干货】

    的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,这时候C提供了一种自定义数据类型,他可以封装多个基本数据类型,这种数据类型叫结构
    的头像 发表于 03-28 17:52 738次阅读

    使用 MISRA C++:2023® 避免基于范围的 for 循环中的错误

    在前两篇博客中,我们 向您介绍了新的 MISRA C++ 标准 和 C++ 的历史 。在这篇博客中,我们将仔细研究以 C++ 中 for 循环为中心的特定规则。
    的头像 发表于 03-28 13:53 781次阅读
    使用 MISRA <b class='flag-5'>C++</b>:2023® 避免基于范围的 for 循环中的错误

    嵌入式系统中C语言结构的基础实现与应用

    C语言中的数组只能允许程序员定义存储相同类型数据。但是结构C语言编程中允许您存储不同数据类型的数据。
    发表于 03-12 14:29 490次阅读
    嵌入式系统中<b class='flag-5'>C</b>语言<b class='flag-5'>结构</b><b class='flag-5'>体</b>的基础实现与应用

    c语言,c++,java,python区别

    C语言、C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言: C语言是一种面向过程的编程语言。它具有底层的特性,能够对计算机硬件进行直接操作。
    的头像 发表于 02-05 14:11 2344次阅读

    深入分析运放的作用

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

    C++简史:C++是如何开始的

    的 MISRA C++:2023 博客系列的第二部分。 在这篇博客中,我们将深入探讨 C++ 的历史、编程语言多年来的发展历程以及它的下一步发展方向。
    的头像 发表于 01-11 09:00 575次阅读
    <b class='flag-5'>C++</b>简史:<b class='flag-5'>C++</b>是如何开始的

    结构与指针的关系

    C语言中,结构(Struct)是一种用户自定义的数据类型,它允许您将不同类型的数据项组合在一起,以便形成一个更复杂的数据结构
    的头像 发表于 01-11 08:00 973次阅读
    <b class='flag-5'>结构</b><b class='flag-5'>体</b>与指针的关系