结构体的简单介绍

news2024/11/18 23:30:32

目录

概念:

与数组类比:

结构体声明:

注意:

结构体变量、全局变量、局部变量:

 结构体声明中包含其他结构体变量:

结构体变量的初始化:

包含了其他结构体变量的初始化:

 结构体变量的打印:

包含其他结构体变量的打印:

 结构体变量的传参:

直接传参:

地址传参:

 两种传参的区别:


                                                          

概念:

结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

与数组类比:

数组是同一种类型的元素的集合,而结构体也是一种结合,且结构体内部的元素可以是不同类型的数据。

结构体声明:

struct tag
{
 member-list;
}variable-list;
  • struct是结构体的关键字,不可更改。
  • tag是结构体的名字,或者标签,可以更改。
  • member-list 结构体的成员列表,表示结构体内部的元素。
  • variable-list 结构体的变量成员列表,表示类型是结构体的变量,可以省略。

注意:

声明只是表示结构体的类型,并不占内存的空间,只有结构体变量初始化或者进行改变的时候,才会占用内存空间。

结构体变量、全局变量、局部变量:

比如:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}p1,p2;

int main()
{
  return 0;
}

 p1和p2都是结构体struct peo类型的变量,而且是全局变量。

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}

int main()
{
 
  struct peo p;
  return 0;
}

p是结构体 struct peo类型的变量,但是它是局部变量。

 

 结构体声明中包含其他结构体变量:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}

struct st
{
   struct peo p;
   int num;
   float f;  
}

int main()
{
 
  struct peo p;
  return 0;
}

结构体struct st中包含了结构体struct peo类型的变量 p 

结构体变量的初始化:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}

int main()
{
 
  struct peo p = {"张三","15596668862", "男", 181};
  return 0;
}

 

包含了其他结构体变量的初始化:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}

struct st
{
   struct peo p;
   int num;
   float f;  
}

int main()
{
 
  struct st s = { {"lisi","15596668888","女",166},108,3.14f};
  return 0;
}
  • 在包含其他结构体的变量时,进行初始化也要把其他结构体变量中的内容进行初始化。
  • 比如以上代码中的{"lisi","15596668888","女",166}就是结构体声明struct st中的另一个结构体变量struct peo p的变量的初始化。 

 结构体变量的打印:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}

int main()
{
 
  struct peo p = {"张三","15596668862", "男", 181};
  printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
  return 0;
}

结构体打印的时候需要使用操作符 “  ” 进行指引。

格式:结构体变量名 . 结构体成员名

包含其他结构体变量的打印:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}

struct st
{
   struct peo p;
   int num;
   float f;  
}

int main()
{
 
  struct st s = { {"lisi","15596668888","女",166},108,3.14f};
  printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);
  return 0;
}

包含其他结构体变量的打印方式如以上代码所示。

本结构体变量名.其他结构体变量名.列表成员名 —打印出其他结构体变量内部的结构体成员名的格式。

 结构体变量的传参:

直接传参:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}

void print1(struct Peo p)
{
   printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
}

int main()
{
 
  struct peo p = {"张三","15596668862", "男", 181};
  print1(p1);
  return 0;
}

地址传参:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}

void print2(struct Peo *sp)
{
   printf("%s %s %s %d\n",sp->name, sp->tele,sp->sex,sp->high);
}

int main()
{
 
  struct peo p = {"张三","15596668862", "男", 181};
  print2(&p1);
  return 0;
}

传参地址,在打印的时候需要使用指针名->结构体成员名的格式

void print2(struct Peo *sp)
{
   printf("%s %s %s %d\n",sp->name, sp->tele,sp->sex,sp->high);
}

void print1(struct Peo p)
{
   printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
}

 两种传参的区别:

  • 实参直接传给形参,其实是一种拷贝,形参也要开辟一个和实参一样大的空间,而后将实参的数据拷贝给形参,但是这样子会造成空间浪费,拷贝数据时也会浪费相对因的时间,若实参越大,浪费的空间越大,拷贝的时间越多。
  • 把结构体变量的地址作为实参传递给形参,形参就只需要创建一个指针的变量空间,通过这个指针变量找结构体的所在空间位置,进行读取数据。

 结论:所以结构体传参的时候一般使用传递结构体变量的地址进行传参。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/962341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

报错:axios 发送的接口请求 404

axios 发送的接口请求 404 一、问题二、分析 一、问题 二、分析 axios 发送的接口请求 404,根本没有把接口信息发送到后端,这个时候你可以查看检查一下自己的接口名字,或让后端配合换一个接口名字再发送一次接口请求

性能提升5倍!翼支付基于多租户的降本增效实践

作者:王硕 中国电信翼支付 DBA 翼支付是天翼电子商务有限公司旗下第三方服务平台,面向 7000 万月活用户,提供民生缴费、消费购物、金融理财等服务内容,依托云计算、大数据、人工智能等技术,联合合作伙伴,赋…

Python操作文件的读取和写入,详解和案例介绍

Python文件IO操作是Python编程中非常重要的一部分,可以通过文件IO操作来读取和写入文件。文件IO操作提供了一种在程序中处理文件的方法,可以读取文件中的数据,也可以将数据写入到文件中。在本文中,我们将介绍Python中文件IO操作的…

【一对一学习小组】2023年有三AI-CV高阶-项目实战组发布,超过30个案例,60小时项目实战+2大基础方向专栏+3本书赠送...

2023年有三AI-CV高阶-项目实战组正式发布!有三AI已经推出了CV初-中-高级培养计划(原名有三AI-CV季划),这是我们的终身计算机视觉学习小组。 该培养计划具有以下特点: 【系统性】配套有非常完备的理论与实践 【永久性】…

stable diffusion实践操作-SD原理

本文专门开一节写提示词相关的内容,在看之前,可以同步关注: stable diffusion实践操作 正文 1、出图原理 1.1 AI画画不是和人一样,从0开始,而是一个去噪点的过程: 1.2 逆向去噪 所有的人图片都是从一张噪…

大型商城系统功能逻辑架构_各大系统关系设计_OctShop

一个商城系统应该具备什么样的功能才算一个合格的网上商城呢,才能满意用户的下单支付,退款退货,售后等需求呢! 商城一般分为三种角色:买家,商家,平台,这三种角色都有各自的功能特点。…

记录--前端使用a链接下载内容增加loading效果

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 问题描述:最近工作中出现一个需求,纯前端下载 Excel 数据,并且有的下载内容很多,这时需要给下载增加一个 loading 效果。 代码如下: // util…

2023_Spark_实验六:Scala面向对象部分演示(二)(IDEA开发)

7、Scala中的apply方法() 遇到如下形式的表达式时,apply方法就会被调用: Object(参数1,参数2,......,参数N) 通常,这样一个apply方法返回的是伴生类的对象;其作用是为了省略new关键字 Object的apply方法…

我开课了!《机器学习》公益课9月4日开课

我是黄海广,大学老师,我上的一门课叫《机器学习》,本科生学机器学习有点难,但也不是没有可能,我在摸索中,设计适合本科生的机器学习课程,写了教材,录了视频,做了课件。我…

如何使用SQL系列 之 了解SQL中的约束规则

简介 在设计数据库时,有时可能需要对某些列中允许的数据设置限制。例如,如果你要创建一张表来保存摩天大楼的信息,你可能希望在保存每座大楼高度的列中禁止使用负值。 关系型数据库管理系统(RDBMS)允许你使用约束来控制哪些数据被添加到表中…

PID 算法

1.1 概述 比例(Proportion)积分(Integral)微分(Differential)控制器(PID控制器或三项控制器)是一种采用反馈的控制回路机制,广泛应用于工业控制系统和需要连续调制控制的…

ArrayList(扩容机制)

文章目录 一、前言二、ArrayList扩容机制1、适用于什么场景?2、ArrayList特点3、ArrayList扩容机制3.1、内存分配的效率:3.2、数据迁移的代价3.3、性能和空间的平衡 三、总结 一、前言 对于ArrayList集合可能大家并不陌生,但ArrayList集合的…

Camera | 12.瑞芯微摄像头自动焦距马达驱动移植

本为你主要讲解如何让摄像头ov13850支持自动对焦功能。 摄像头的对角主要通过VCM马达驱动芯片DW9714来实现的。 一、环境 soc : rk3568 board: EVB1-DDR4-V10 软 件:Android 11 Linux:4.19.232 Camera:ov13850二、DW9714 1.DW9714简介 DW9714专…

企业知识管理的解决方案

人们发现,挖掘知识、创造知识、生产知识,用知识为自己的产品赋予高附加值,才是企业和社会可持续发展的动力之源。所以知识管理越来越受到重视。 知识管理作为一个新兴的管理概念,已经被学术界所接受,但尚未形成一个…

网站用户体验之深度感悟

个性化定制界面和极简版原装界面,哪一个你用起来更加顺手呢,相比之下你更喜欢哪一个? 界面选择: (提醒:仅个人感悟。~~) 方向一:表明自己的喜好 我个人觉得更喜欢个性化定制界面。…

虚拟机有代理备份、无代理备份是什么?

有代理备份: 在虚拟机内部安装备份代理程序,然后把虚拟机当作物理机一样来进行备份任务。借助虚拟机系统中内置的程序来进行备份的,就像在正常系统中备份那样,借助备份和还原(Windows7)功能对系统进行备份…

知识图谱笔记:TransE

1 知识图谱介绍 一条知识图谱可以表示为一个三元组(sub,rel,obj)。 举个例子:小明的爸爸是大明,表示成三元组是(小明,爸爸,大明)。前者是主体,中间是关系,后者是客体。主体和客体统…

layui引入百度地图

<script type"text/javascript" src"//api.map.baidu.com/api?typewebgl&v1.0&ak你的ak"></script> <script src"https://code.bdstatic.com/npm/jquery1.12.4/dist/jquery.min.js"></script> <script src&…

科技驱动产业升级:浅谈制造型企业对MES系统的应用

在科技不断进步的背景下&#xff0c;制造型行业也在持续发展&#xff0c;但随之而来的挑战也不断增加。传统的管理方式已经无法满足企业的需求&#xff0c;因此许多制造型企业开始寻找新的管理模式。制造执行系统&#xff08;MES&#xff09;作为先进的制造信息技术之一&#x…

【微信小程序】父子组件的创建、通信与事件触发;组件生命周期

前言 关于微信小程序中父子组件的创建、传值&#xff0c;以及涉及到的组件生命周期。 使用组件的优点 组件的使用可以提高开发效率并确保功能在各个页面上的应用和修改的一致性。 例如&#xff0c;对于一些重复的功能&#xff0c;比如顶部导航栏或评论区&#xff0c;将其提炼…