结构体的简单介绍

目录

概念:

与数组类比:

结构体声明:

注意:

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

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

结构体变量的初始化:

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

 结构体变量的打印:

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

 结构体变量的传参:

直接传参:

地址传参:

 两种传参的区别:


                                                          

概念:

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

与数组类比:

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

结构体声明:

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.mzph.cn/news/62321.shtml

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

相关文章

SPI2外设驱动-W25Q64 SPI接口初始化

前言 (1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。 (2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片…

【FlowDroid】一、处理流程学习

FlowDroid 一、处理流程学习 下载配置源码概况代码逻辑分析analyzeAPKFilerunInfoflowprocessEntryPointcalculateCallbacks(sourcesAndSinks)再次回到processEntryPoint 自己做一些笔记 下载配置 参照我前面的文章可以使用FlowDroid安装初体验 为了看代码了解FlowDroid如何处…

homeassistant ubuntu自启动 网络设置

命令行安装virtualbox 或者安装包 hass官网下载 haos_ova-10.4.vdi virtualbox 装hass 最少2G内存 其他省略 自启动: gnome-session-properties 添加 VBoxManage startvm hass --type headless hass为自己的虚拟机名字 网络配置如下: 要全部打开

【云原生】Kubernetes容器编排工具

目录 1. K8S介绍 1.1 k8s的由来 下载地址 1.2 docker编排与k8s编排相比 1.3 传统后端部署与k8s 的对比 传统部署 k8s部署 ​2. k8s的集群架构与组件 (1) Kube-apiserver (2)Kube-controller-manager (3&a…

Qt应用开发(基础篇)——对话框窗口 QDialog

一、前言 QDialog类继承于QWidget,是Qt基于对话框窗口(消息窗口QMessageBox、颜色选择窗口QColorDialog、文件选择窗口QFileDialog等)的基类。 QDialog窗口是顶级的窗口,一般情况下,用来当做用户短期任务(确认、输入、选择)或者和用户交流(提…

一、安装GoLang环境和开发工具

一、安装GoLang环境 GoLang中国镜像站 下载后对应的环境包以后,一路下一步就好了,安装路径的话,尽量就安装到默认的文件目录下。 二、配置Go的环境变量 右击此电脑–>属性–>高级系统设置–>环境变量,打开环境变量设置…

MySQL高阶语句之常用查询

目录 常用查询 按关键字排序 区间判断及查询不重复记录 对结果进行分组 限制结果条目 设置别名 通配符 子查询 常用查询 (增、删、改、查) 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 …

设计模式之工厂模式(万字长文)

文章目录 概述工厂模式的优点包括工厂模式有几种主要的变体看一个具体需求使用传统的方式来完成传统的方式的优缺点 简单工厂模式基本介绍使用简单工厂模式简单工厂模式的优缺点优点:缺点: 工厂方法模式看一个新的需求思路 1思路 2工厂方法模式介绍工厂方…

nextTick原理

nextTick 是 Vue 提供的一个异步方法,用于在 DOM 更新之后执行回调函数。它的原理是利用 JavaScript 的事件循环机制来实现异步执行。 具体来说,当我们调用 nextTick 方法时,Vue 会将传入的回调函数添加到一个队列中。在下一个事件循环中&am…

Django(7)-项目实战-发布会签到管理系统

本文使用django实现一个简单的发布会签到管理系统 登录功能 模板页面 sign/templates/index.html <!DOCTYPE html> <html> <head><title>Login Page</title> </head> <body><h1>发布会管理</h1><form action=&qu…

springboot实战(一)之项目搭建

环境准备 ideajdk1.8springboot版本 2.7.15 项目开始 1.打开idea&#xff0c;点击new project 2.选择spring initillizr 核对&#xff1a;Server Url是否是&#xff1a;start.spring.io&#xff0c;然后根据自己依次设置项目名称、存储位置和包名&#xff0c;如下&#xff…

北京开发APP的费用明细

开发APP项目时&#xff0c;在功能确定后需要知道有哪些可能的费用&#xff0c;安排项目预算。北京开发APP的费用明细可能会包括以下几个部分&#xff0c;每个部分都会产生一些费用。今天和大家分享APP费用明细有哪些&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&…

vue2 自定义指令,插槽

一、学习目标 1.自定义指令 基本语法&#xff08;全局、局部注册&#xff09;指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 二、自定义指令 1.指令介绍 内置指令&#xff1a;v-html、v-if、v-bind、v-on… 这都是Vue给咱们内置的一些指令&#xff0c;…

大数据之Maven

一、Maven的作用 作用一&#xff1a;下载对应的jar包 避免jar包重复下载配置&#xff0c;保证多个工程共用一份jar包。Maven有一个本地仓库&#xff0c;可以通过pom.xml文件来记录jar所在的位置。Maven会自动从远程仓库下载jar包&#xff0c;并且会下载所依赖的其他jar包&…

《信息系统项目管理师教程(第4版)》第17章 采购管理、合同管理 知识点整理,xmind思维导图

已上传采购管理xmind思维导图&#xff0c;需要的同学可以直接下载哦。 一、规划采购管理 二、实施采购 三、控制采购 四、合同管理 4.1 合同类型 4.2 合同管理过程 签订履行变更档案&#xff0c;合同档案管理是整个合同管理的基础&#xff0c;要求采用电脑打印文本&#xff…

考研408 | 【操作系统】终章

I/O设备的基本概念和分类 I/O设备&#xff1a; I/O设备的分类 1.按使用特性&#xff1a; 2.按传输速率分类&#xff1a; 3.按信息交换的单位分类&#xff1a; 总结&#xff1a; I/O控制器 I/O设备的机械部件&#xff1a; I/O设备的电子部件&#xff08;I/O控制器&#…

国标视频融合云平台EasyCVR视频汇聚平台的应用场景及其功能说明

一、平台简介 EasyCVR国标视频融合云平台是一款基于端-边-云一体化架构的视频融合AI智能分析网关平台。EasyCVR平台支持视频汇聚、融合管理&#xff0c;兼容多类型设备、多协议接入。其提供的视频功能包括&#xff1a;视频监控、无插件直播录像、云存储、检索回放、智能告警、…

uniapp微信小程序使用stomp.js实现STOMP传输协议的实时聊天

简介&#xff1a; 原生微信小程序中使用 本来使用websocket&#xff0c;后端同事使用了stomp协议&#xff0c;导致前端也需要对应修改。 如何使用 1.yarn add stompjs 2.版本 “stompjs”: “^2.3.3” 3.在static/js中新建stomp.js和websocket.js&#xff0c;然后在需要使用…

E8267D 是德科技矢量信号发生器

描述 最先进的微波信号发生器 安捷伦E8267D PSG矢量信号发生器是业界首款集成式微波矢量信号发生器&#xff0c;I/Q调制最高可达44 GHz&#xff0c;典型输出功率为23 dBm&#xff0c;最高可达20 GHz&#xff0c;对于10 GHz信号&#xff0c;10 kHz偏移时的相位噪声为-120 dBc/…

【C51基础实验 LED流水灯】

51单片机项目基础篇 LED流水灯1、硬件电路设计和原理分析2、软件设计2.1、利用循环和移位操作符功能实现&#xff1a;LED流水灯2.2、利用利用封装好的库函数功能实现&#xff1a;LED流水灯 3、编译结果4、结束语 LED流水灯 前言&#xff1a; 前几篇学会了LED驱动原理&#xff…