结构体与共用体——C语言——day15

news2024/11/15 21:34:34

在C语言中,C语言允许用户自己指定这样一种数据结构,它称为结构体(structure) 。它相当于其他高级语言中的“记录”。

在这里插入图片描述

假设程序中要用到图所表示的数据结构,但是C语言没有提供这种现成的数据类型,因此用户必须要在程序中建立所需的结构体类型。

eg:
struct student 
{
	int num; 
	char name[20]; 
	char sex; 
	int age; 
	float score; 
	char addr[30]; 
};

声明一个结构体类型的一般形式为:

struct 结构体名
{
	成员列表
};

“结构体名”用作结构体类型的标志,它又称“结构体标记" (structure tag) 。上面的结构体声明中student就是结构体名(结构体标记)。花括号内是该结构体中的各个成员,由它们组成一个结构体。例如,例中的num、name、sex 等都是成员。对各成员都应进行类型声明,即

类型名 成员名;

也可以把“成员列表 “(member list) 称为“域表” (field list) 。每一个成员也称为结构体中的一个域。成员名命名规则与变量名相同。

定义结构体类型变量的方法

  1. 先声明结构体类型再定义变量名
    如上面已定义了一个结构体类型 struct student, 可以用它来定义变量。例如:
    在这里插入图片描述
    定义了 student1和student2为struct student类型的变量,即它们具有struct
    student 类型的结构:
    在这里插入图片描述
  2. 在声明类型的同时定义变量
eg:
struct student 
{
int num; 
char name[20]; 
char sex; 
int age; 
float score; 
char addr[30]; 
}studentl, student2;

它的作用与第一种方法相同,即定义了两个 struct student 类型的变量 student1、student2 。这种形式的定义的一般形式为:

struct 结构体名
{ 
成员表列
}变量名表列;
  1. 直接定义结构体类型变量
其一般形式为:
struct
{ 
成员表列
}变量名表列;
即不出现结构体名。

结构体变量的引用

(1) 不能将一个结构体变量作为一个整体进行输人和输出。例如,已定义 student1和student2 为结构体变量并且它们已有值。

print£(11%d, %s, %c , %d, %£. %s\n" ,studentl) //不能这么引用
正确的方法应该是:结构体变量名.成员名

(2) 如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。
(3) 对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。

eg:
student2.score= studentl. score; 
sum = studentl.score+ student2.score; 
studentl.age++ ; 
++studentl.age;

(4) 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。

scanf("%d", &studentl.num);  //输入studentl. num 的值
printf("%o", &studentl);  //输出 studentl 的首地址

结构体数组

定义结构体数组

struct student 
{ int num; 
char name[20]; 
char sex; 
int age; 
float score; 
char addr[30]; 
}; 
struct student stu[3];

以上定义了一个数组stu, 数组有3个元素,均为 struct student 类型数据。
在这里插入图片描述
数组各元素在内存中连续存放。

结构体数组的初始化

struct student 
{int num; 
char name[20]; 
char sex; 
int age; 
float score; 
char add[30];
}stu[ 3] ={{10101,"Li Lin",'M',18,87.5,"103 Beijing Road"} , {10102 ,"Zhang Fun", 'M', 19, 99 ,
"130 Shanghai Road" }, { 10104 ,"Wang Min", 'F' , 
20, 78.5 ,"1010 Zhongshan Road"} } ;

在这里插入图片描述

以上就是今天的内容!

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

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

相关文章

vue3学习——初始化项目及配置

初始化项目 环境 node 16pnpm 8.0.0 命令 pnpm create vite进行以下选择 👇 – 项目名 – VUe – Ts – cd/目录 – pnpm run dev 浏览器自动打开 package.json 配置eslint 安装依赖包 pnpm i eslint -D npx eslint --init // 生成配置文件进行以下选择 &a…

golang开源的可嵌入应用程序高性能的MQTT服务

golang开源的可嵌入应用程序高性能的MQTT服务 什么是MQTT? MQTT(Message Queuing Telemetry Transport)是一种轻量级的、开放的消息传输协议,设计用于在低带宽、高延迟或不可靠的网络环境中进行通信。MQTT最初由IBM开发&#xf…

在windows和Linux中的安装 boost 以及 安装 muduo

二、安装boost boost官网:boost官网 我下载的boost版本: windows:boost_1_84_0.ziplinux:boost_1_84_0.tar.gz 2.1 在windows中安装boost和测试 (1)在windows中,解压这个压缩包boost_1_84_0.zip,路径为…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(三)NodeJS入门——http协议

033_HTTP协议_初识HTTP协议 hello,大家好,这个小节我们来认识一下 http协议。 http是几个单词的首字母拼写,全称为Hypertext Transfer Protocol 译为超文本传输协议,那么这个http协议是互联网上应用最广泛的协议之一。顺便说一下…

壹[1],Xamarin开发

1,环境 VS2022 注: 1,本来计划使用AndroidStudio,但是也是一堆莫名的配置让人搞得很神伤,还是回归C#。 2,MAUI操作类似,但是很多错误解来解去,且调试起来很卡。 3,最…

【3DGS】从新视角合成到3D Gaussian Splatting

文章目录 引言:什么是新视角合成任务定义一般步骤NeRF的做法NeRF的三维重建NeRF的渲染 3DGS的三维重建从一组图片估计点云高斯点云模型球谐函数参数优化损失函数和协方差矩阵的优化高斯点的数量控制(Adaptive Density Control)新的问题 3DGS的渲染:快速可…

[网络安全]IIS---FTP服务器 、serverU详解

一 . FTP服务器(File Transfor Protocol) : 协议:文件传输协议 端口号:TCP: 20(数据) / 21(控制) 二 . FTP工作方式: 1.主动模式 : (FTP服务器21端口与FTP客户端产生的随机端口先建立连接 建立连接后,再使用FTP服务器21端口与FTP客户端创建的一个新的随机端口进行发送…

Mobileye CES 2024 自动驾驶新技术新方向

Mobileye亮相2024年国际消费类电子产品展览会推出什么自动驾驶新技术? Mobileye再次亮相CES,展示了我们的最新技术,并推出了Mobileye DXP--我们全新的驾驶体验平台。 与往年一样,Mobileye是拉斯维加斯展会现场的一大亮点,让参观者有机会见证我们对自主未来的愿景。 在…

Wpf 使用 Prism 实战开发Day16

客户端使用RestSharp库调用WebApi 动态加载数据 在MyDoTo客户端中,使用NuGet 安装两个库 RestSharp Newtonsoft.Json 一. RestSharp 简单的使用测试例子 当前章节主要目的是:对RestSharp 库,根据项目需求再次进行封装。下面先做个简单的使用…

前端开发基于Qunee绘制网络拓扑图总结-02

1、渲染连线颜色 *关键函数一定要调用:graph.invalidate()* graph.forEach(function(element) {if (element instanceof Q.Edge) {let arr [#549BF1, #AA8A6E, #8F54F1,#5A70BC,#BCBF5C, #BC5A76, #67B4D4,#B4C9EF, #676AD4, #A86EAA,#5CBF7F, #EFB4B4];let inde…

CapCut - 剪映国际版11.0.0

【应用名称】:CapCut - 剪映国际版 【适用平台】:#Android 【软件标签】:#CapCut #剪映国际版 【应用版本】:11.0.0 【应用大小】:231MB 【软件说明】:软件升级更新。目前大家广泛使用的最令人惊叹、最专业…

负载均衡下的webshell上传+nginx解析漏洞

负载均衡下的webshell上传 一,负载均衡下webshell上传的四大难点 难点一:需要在每一台节点的相同位置上传相同内容的webshell 我们需要在每一台节点的相同位置都上传相同内容的 WebShell一旦有一台机器上没有,那么在请求轮到这台机器上的时…

C++ hash—unordered_mapset

目录 一. unordered系列关联式容器 1、文档说明 2、接口说明 1. 构造 2. 容量 3. 迭代器 4. 元素访问 5. 查询 6. 修改 7. 桶操作 8. 测试 二、unordered_set 1、​​​​​​​文档说明 2、接口说明 1. 构造 2. 容量 3. 迭代器 4. 元素访问 5. 插入和删除…

AI赋能编程 | 自动化工具助力高效办公

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言泡泡AI工具卡片思维导图Markdown编辑器 其他工具文件免费处理工具结语 合集…

SpringBoot 使用WebSocket功能

实现步骤&#xff1a; 1.导入WebSocket坐标。 在pom.xml中增加依赖项&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>2.编写WebSocket配…

查看 npm的一些命令,以及npm config set registry x x x 不生效 解决方案

在 Mac 上查看自己的 npm 源&#xff0c;可以使用以下命令&#xff1a; 打开终端应用程序&#xff08;Terminal&#xff09;。 运行以下命令来查看当前的 npm 配置&#xff1a; npm config list这会显示 npm 的配置信息&#xff0c;包括当前使用的源&#xff08;registry&am…

FCIS 2023:洞悉网络安全新前沿,引领未来安全创新狂潮

在数字化浪潮席卷全球的今天&#xff0c;网络安全问题愈发凸显其重要性。 FCIS 2023网络安全创新大会作为业界瞩目的盛会&#xff0c;不仅汇聚了国际顶尖的网络安全专家&#xff0c;更展示了最前沿的安全技术与研究成果。那么&#xff0c;参与这场大会&#xff0c;我们究竟能学…

MySQL-DQL(Data Query Language)数据查询语言

文章目录 1. DQL定义2. 基础查询3. 条件查询&#xff08;WHERE&#xff09;4. 分组查询&#xff08;GROUP BY&#xff09;5. 过滤分组&#xff08;HAVING&#xff09;6. 排序&#xff08;ORDER BY&#xff09;7. 限制查询结果的条数&#xff08;LIMIT&#xff09;8. 多表查询8.…

OG Trade在ZKX揭幕:一家基于Starknet的游戏化永续合约交易所

ZKX的 OG Trade通过内置游戏化和30分钟交易竞赛&#xff0c;为所有交易者创造机会&#xff0c;革新了永续合约交易模式。 2024年1月30日 — ZKX宣布推出OG Trade&#xff0c;这是一家基于Starknet的游戏化永续合约交易所&#xff0c;旨在满足短期交易者、高水平交易者和波段交易…

数据可视化工具之选,三选一?

在数据可视化的世界中&#xff0c;选择一款合适的工具对于提升工作效率和洞察力至关重要。本文将对三款主流数据可视化工具进行详细比较&#xff0c;包括山海鲸可视化、Echarts和D3.js&#xff0c;以帮助您做出明智的选择。 山海鲸可视化 山海鲸可视化是一款免费且功能强大的…