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

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

3天内不再提示

结构体基本用法详解

CHANBAEK 来源:博客园-lzh666 作者:博客园-lzh666 2023-02-15 14:52 次阅读

结构体详解

结构体基本用法:

结构体就是把相同或者不同类型的便利放到一起,这和C++中的类很像,但没有c++那么复杂,C语言中的结构体申明如下:

struct student           //结构体名
{
    char   name[10];     //姓名
    int    number;       //编号
    int    grade;        //成绩
};

申明很简单,其内存是按顺序放置的。

下面需要注意的几点:

1.申明时不能初始化(为什么后面会讲)

2.申明只是申明一个结构体,是不能使用的

3.获取结构体大小可以用sizeof(struct student)

4.结构体可以嵌套定义

5.结构体大小必须是所有成员变量大小的整数倍

一般我们会使用新定义类型来代替结构体,其实就是给结构体起一个新的名字

typedef  struct student
{
     char     name[10];
     int      number;
     int      grade;
}STU;

STU stu1={"张三",001,95};//定义一个stu1结构体变量,并进行初始化

注意:只有在定义的时候才能一起初始化,一旦定义了之后,不能一起初始化,但是可以分别初始化,为啥之后不能初始化,主要原因是因为结构体变量是按顺序存储的。

这样STU表示的实际就是结构体,具体可以参考typedef用法。

结构体既然申明了那怎么使用了,这里我们必须定义一个结构体变量,注意是结构体变量,也就是定义一个变量,这里的变量的类型是结构体,因此结构体申明部分其实就是申明一个新的变量类型,因此结构体是一个类型,不是变量,所以这也就是为啥申明的时候里面不能进行初始化的原因。 下面举个例子来使用结构体:

我们引用结构体是可以这样引用:
stu1.name="李四";
stu1.number=002;
stu1.grade=100;
上面的引用方式是成员引用,也就是普通变量方式引用,还有一种引用就是结构体指针引用,这两种引用的方式有很大不同,后面会讲到。
指针引用时必须申明一个结构体指针,就像在整型变量中使用指针一样,我们需要先定义一个整型指针变量,然后使用它,这里也是一样。
STU  *stu2;   //定义一个stu2结构体指针变量

上面不能进行初始化,因为其实质是一个指针,不能像变量一样可以一起初始化(当然,指针实质还是变量,但是其使用不一样,所以一般说指针还是指指针变量)

既然是指针,那么必须指向一个内存地址,因此指针变量使用之前必须指向一块特定的内存地址,结构体指针也不例外。 那我们怎样初始化结构体指针呢

第一种方式用动态分配内存的方式:

stu2=(STU*)malloc(STU);

第二种方式使用结构体变量间接方式:

stu2=&stu1;

这样结构体stu2指向的就是stu1的首地址。

结构体高级用法:

在函数中,如果参数是结构体,那么又该怎样使用呢,其实我们使用结构体和使用变量是一样的,定义如下

void swap(STU stu1,STU stu2)
{
   int exchange=0;
   exchange = stu1.grade;
   stu1.grade=stu2.grade;
   stu2.grade=exchange;
   /******
    ......
   ******/
}

这样就可以使用结构体变量了,但是请思考下面代码结果:

STU stu3={"王五",003,80};
swap(stu1,stu3);

执行这个函数两个结构体中的grade会交换么? 结果是不会。 这里就和函数中讲解的是一样的,那么我们怎么才能将其交换呢,在普通函数中给的方法是使用指针,因此这里我们同样可以使用指针来操作,我们必须将函数的形参定义为结构体指针变量。 如下:

STU swap(STU *stu1,STU *stu2)
{
    int exchange=0;
    exchange = stu1->grade;
    stu1->grade=stu2->grade;
    stu2->grade=exchange;

}

这样我们使用

swap(&stu1,&stu3);

就可以将其调换位置了

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

    关注

    180

    文章

    7604

    浏览量

    136771
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73636
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28365
  • 结构体
    +关注

    关注

    1

    文章

    130

    浏览量

    10841
收藏 人收藏

    评论

    相关推荐

    C语言中结构struct的用法

    结构数组就是具有相同结构类型的变量集合,假如要定义一个班级40个同学 的姓名、性别、年龄和住址, 可以定义成一个结构数组。如下所示:
    的头像 发表于 03-31 11:45 3607次阅读

    结构使用方法

    虽然粉丝最后都理解了,但是仍想趁着这个机会整理一下结构用法,希望能够对刚入行的童鞋们有所帮助。
    的头像 发表于 09-28 15:43 1612次阅读

    C语言结构(struct)用法详解

    在实际的开发过程中,一组数据往往具有不同的数据类型,此时数组是不能够满足需求了。因为数组中各元素的类型必须是一致的。为了解决这个需求,C中给出了另一种数据类型-`结构`,每一个成员可以是任意一种数据类型。
    的头像 发表于 02-21 10:14 2254次阅读
    C语言<b class='flag-5'>结构</b><b class='flag-5'>体</b>(struct)<b class='flag-5'>用法</b>的<b class='flag-5'>详解</b>

    C语言-结构对齐详解

    `C语言-结构对齐详解朱有鹏1、结构为何要对齐访问访问结构
    发表于 07-12 16:41

    如何定义结构

    什么是结构,如何定义结构? 温馨提示: 请从以下链接中的帖子学习相关内容并进行回答,其他地方得到的答案不能作为标准答案,仅能做为补充说明,七天之内答案不可见,答题的童鞋有七天
    发表于 05-08 05:55

    一文详解ADC的外围功能与结构

    本文主要从ADC中用到的结构、函数以及用法进行讲解
    发表于 01-25 07:05

    USART初始化结构详解

    USART 初始化结构详解标准库函数对每个外设都建立了一个初始化结构,比如USART_InitTypeDef,
    发表于 02-22 06:08

    请教下有没有好的用法可以将结构和easyflash结合进行使用?

    以往的FLASH存储信息,是使用结构先进行分类,在通过flash写入库函数进行存储,而且使用的范围比较广如果使用easyflash是进行键值的改动,改动的代码量会比较大,请教下有没有好的用法可以将
    发表于 02-13 14:41

    OrCAD中创建总线及用法详解

    OrCAD中创建总线及用法详解,如何创建总线,菜单place->bus或者右侧快捷按钮
    发表于 12-02 10:18 2.6w次阅读

    c语言_结构和共同体

    这份PPT很全面讲解了结构的各种用法,够全面,对结构的各种应用也举了例子,本人已验证过的!另外也讲解了共同体和枚举,这两部分描述较少。
    发表于 06-15 10:58 0次下载

    Typedef用法小结

    非常不错的文档有着基本数据类型结构enum与函数指针等等的Typedef相关用法.
    发表于 11-02 11:36 19次下载

    ADC0809用法详解_引脚图及功能_工作原理_内部结构及应用电路

    本文主要介绍了ADC0809用法详解_引脚图及功能_工作原理_内部结构及应用电路。ADC0809是采用CMOS工艺制造的双列直插式单片8位A/D转换器。A/D转换后得到的数据应及时传送给单片机进行处理。
    发表于 12-13 09:32 19.3w次阅读
    ADC0809<b class='flag-5'>用法</b><b class='flag-5'>详解</b>_引脚图及功能_工作原理_内部<b class='flag-5'>结构</b>及应用电路

    XMEGA PWM模块多通道的用法详解

    本文主要详解XMEGA PWM模块多通道的用法,具体的跟随小编来了解一下。
    的头像 发表于 06-18 14:09 4337次阅读
    XMEGA PWM模块多通道的<b class='flag-5'>用法</b><b class='flag-5'>详解</b>

    CMake用法详解

    CMake用法详解
    发表于 10-25 16:28 2次下载

    C语言结构(struct)用法详解

    在实际的开发过程中,一组数据往往具有不同的数据类型,此时数组是不能够满足需求了。因为数组中各元素的类型必须是一致的。为了解决这个需求,C中给出了另一种数据类型-结构,每一个成员可以是任意一种数据类型。
    的头像 发表于 11-15 16:11 1895次阅读
    C语言<b class='flag-5'>结构</b><b class='flag-5'>体</b>(struct)<b class='flag-5'>用法</b><b class='flag-5'>详解</b>