结构体类型

结构体是一种构造数据类型,把不同类型的数据整合在一起,每一个数据都称为该结构体类型的成员。

结构体(struct)数据类型可以把基本数据类型和派生类组合起来,以描述复杂的事物。结构类型也是派生类型。

基本数据类型都是单一的,只能表示一些简单的事物。

结构体类型定义

在程序设计中,使用结构体类型时,首先对结构体类型的组成进行描述,定义方式:

struct 结构体类型名称
{数据类型 成员1;数据类型 成员2;...数据类型 成员n;
}

结构体变量的定义:为了能在程序中使用结构体类型的数据,应该定义结构体类型的变量,并在其中存放具体的数据。

struct [结构类型名] {成员声明列表} [变量名列名];

1、定义结构体类型,定义结构体变量;

struct coord
{int x;int y;
}  ;

2、在定义结构体类型的同时定义结构体变量;

struct coord
{int x;int y;
}  first , secord;

3、直接定义结构体变量(不建议)

struct 
{int x;int y;
}  first , secord;

结构体类型时用户自定义的一种数据类型,在编译时对结构体类型不分配空间,只有用它来定义某个变量时,才会为该结构体变量分配结构体类型所需大小的内存单元。

结构体变量的内存分配:结构体变量占据的内存大小是按照字节对齐的机制来分配的。通常情况下,字节对齐满足两个原则。

1、结构体的每个成员变量相当于结构体首地址的偏移量,是该成员变量的基本数据类型(不包括结构体、数组等)大小的整数倍,如果不够,编译器会在成员之间加上填充字节

2、结构体的总大小为结构体最宽基本类型成员大小的整数倍,如果不够,编译器会在最末一个成员之后加上填充字节

程序演示:

struct Sample
{short int n;char c[11];   float f;double b;
}s;int main(void)
{printf("变量s所占字节数为:%d个字节\n",sizeof(s));  printf("结构成员   地址\n");printf("    n     %X\n",&s.n) ;printf("    c     %X\n", s.c) ;printf("    f     %X\n",&s.f) ;printf("    n     %X\n",&s.b) ;return 0;
}

例题1:计算两点之间的距离

#include<stdio.h>
#include<math.h>
struct coord   //结构类型定义 
{int x;int y;
};int main(void)
{struct coord first,second; //结构变量声明double distance;printf("请输入第一个点坐标:");scanf("%d %d",&first.x,&first.y); //点运算符访问结构成员printf("请输入第二个点坐标:"); scanf("%d %d",&second.x,&second.y);int xDiff = first.x-first.x;      //横坐标的差 int yDiff = second.x-second.y;   //纵坐标的差 distance = sqrt(pow(xDiff,2)+pow(yDiff,2));printf("两点间距离是:%f\n",distance);return 0;
}

通过点运算符访问结构成员:结构变量实际上是结构中多个成员变量的组合。在C语言中,使用“.”运算符来引用结构体变量中的各个成员。

注意:通常结构体类型的定义放在主函数外。

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

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

相关文章

SELinux零知识学习二十四、SELinux策略语言之类型强制(9)

接前一篇文章&#xff1a;SELinux零知识学习二十三、SELinux策略语言之类型强制&#xff08;8&#xff09; 二、SELinux策略语言之类型强制 3. 访问向量规则 AV规则就是按照对客体类别的访问许可指定具体含义的规则&#xff0c;SELinux策略语言目前支持四类AV规则&#xff1a…

数据库管理变更工具

Bytebase 是一个开源的数据库管理工具&#xff0c;旨在简化团队协作和版本控制数据库架构和数据的过程。它提供了以下主要功能&#xff1a; 1. 数据库架构管理&#xff1a;Bytebase 允许用户创建和管理数据库架构&#xff0c;并支持版本控制&#xff0c;使团队成员可以协同编辑…

单链表相关面试题--5.合并有序链表

5.合并有序链表 21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; /* 解题思路&#xff1a; 此题可以先创建一个空链表&#xff0c;然后依次从两个有序链表中选取最小的进行尾插操作进行合并。 */ typedef struct ListNode Node; struct ListNode* mergeTwoList…

【对象的深层拷贝】

工具函数 export function deepCloneWithReactivity(obj) {if (!obj && typeof obj ! object) {throw new Error(error arguments, deepClone);}const objClone Array.isArray(obj) ? [] : {};if (obj && typeof obj object) {for (const key in obj) {if …

使用 API 管理平台的 5 大理由

组织需要治理和控制API生态系统&#xff0c;这种治理就是API管理的作用。 Uber 使用 API​​&#xff08;应用程序编程接口&#xff09;与 Google Maps 和 Twilio 等第三方服务连接&#xff0c;这有助于改善用户体验&#xff1b; Salesforce 提供 API&#xff0c;允许开发人员…

redis的性能管理

查看内存使用指标 查看内存使用指标 info memory used_memory:1800800 redis中主句占用的内存 used_memory_rss:5783552 redis向操作系统申请的内存 used_memory_peak:1800800使用内存的峰值 系统巡检&#xff1a;硬件巡检&#xff0c;数据库&#xff0c;nginx redis docke…

虚函数可不可以重载为内联 —— 在开启最大优化时gcc、clang和msvc的表现

下面是对该问题的一种常见回答&#xff1a; 首先&#xff0c;内联是程序员对编译器的一种建议&#xff0c;因此可以在在重载虚函数时在声明处加上inline关键字来修饰&#xff0c; 但是因为虚函数在运行时通过虚函数表&#xff0c;而内联函数在编译时进行代码嵌入&#xff0c;因…

Linux wait函数用法

wait 函数是用于等待子进程结束并获取子进程的终止状态的系统调用。它在父进程中使用&#xff0c;用于等待其子进程终止并获得子进程的退出状态。 函数原型&#xff1a; pid_t wait(int *status);status 是一个指向整型的指针&#xff0c;用于存储子进程终止时的退出状态&…

redis的集群

高可用方案 1、持久化 2、高可用 主从复制 哨兵模式 集群 主从复制: 主从复制是redis实现高可用的基础&#xff0c;哨兵模式和集群都是在主从复制的基础之上实现高可用 主从复制实现数据的多机备份&#xff0c;以及读写分离&#xff08;主服务器负责写&#xff0c;从服务器…

RFID读写器在物联网中的应用与优势

随着物联网技术的不断发展&#xff0c;RFID读写器作为物联网感知层的重要组成部分&#xff0c;在各个领域得到了广泛应用。本文将介绍RFID读写器在物联网中的应用及优势。 一、RFID读写器概述 RFID&#xff08;Radio Frequency Identification&#xff09;技术是一种利用无线…

机器学习中的特征选择:方法和 Python 示例

布拉加德什桑达拉拉詹 一、说明 特征选择是机器学习流程中至关重要且经常被低估的步骤。它涉及从数据集中的原始特征集中选择最相关的特征&#xff08;输入变量或属性&#xff09;的子集。特征选择的重要性怎么强调都不为过&#xff0c;因为它直接影响机器学习模型的质量、效率…

Python遍历某一文件夹下的所有txt文件,并将这些txt文件的内容写到一个新的txt文件中

写在前面&#xff1a;最近在某视频网站学习java&#xff0c;视频中老师将所有知识点写在了当天代码文件夹下的txt文件中&#xff0c;我每天早晨复习的时候&#xff0c;要打开n多个目录才能找到要复习的全部内容&#xff0c;不胜其烦&#xff0c;因此写下此代码&#xff0c;将整…

【SA8295P 源码分析】129 - GMSL2 协议分析 之 Video Frame 帧数据结构分析 PCLK 计算公式

【SA8295P 源码分析】129 - GMSL2 协议分析 之 Video Frame 帧数据结构分析 & PCLK 计算公式 一、GMSL2 Video Frame 数据分析1.1 视频帧数据结构组成1.2 PCLK 计算公式二、GMSL2 协议 Video 数据带宽计算三、双加载模式 Double Loading Mode四、零填充模式 Zero-Padding M…

leetcode 240. 搜索二维矩阵 II

2023.11.22 本题最先想到的是暴力法和二分法&#xff0c;暴力法就不写了&#xff0c;写一下二分法的解法&#xff0c;java代码如下&#xff1a; class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int[] row : matrix){int left 0;int right r…

网站首页布局设计模板推荐给你这个8款!

想要设计一个有品质的网站首页&#xff0c;一款好的网站首页布局设计模板是不可或缺的。然而&#xff0c;网站首页布局设计模板市场上的品质千差万别&#xff0c;要花费大量时间和精力寻找合适的模板。于是&#xff0c;本篇文章将介绍免费获取网站首页布局设计模板的步骤&#…

Moonbeam Network已上线原生USDC稳定币

原生USDC已经通过XCM从波卡来到了Moonbeam&#xff0c;该如何利用&#xff1f;此次集成通过把热门的Circle稳定币带来波卡生态&#xff0c;连接了区块链世界与传统金融。现在&#xff0c;用户和开发者可以在Moonbeam网络中踏寻USDC的强大之处。 Moonbeam生态中的Moonwell、FiD…

【容器化】Kubernetes(k8s)

文章目录 概述Docker 的管理痛点什么是 K8s云架构 & 云原生 架构核心组件K8s 的服务注册与发现组件调用流程部署单机版部署主从版本Operator来源拓展阅读 概述 Docker 虽好用&#xff0c;但面对强大的集群&#xff0c;成千上万的容器&#xff0c;突然感觉不香了。 这时候就…

消息中间件——RabbitMQ(四)命令行与管控台的基本操作!

前言 在前面的文章中我们介绍过RabbitMQ的搭建&#xff1a;RabbitMQ的安装过以及各大主流消息中间件的对比&#xff1a;&#xff0c;本章就主要来介绍下我们之前安装的管控台是如何使用以及如何通过命令行进行操作。 1. 命令行操作 1.1 基础服务的命令操作 rabbitmqctl sto…

验收材料-软件质量保证措施

一、 质量保障措施 二、 项目质量管理保障措施 &#xff08;一&#xff09; 资深的质量经理与质保组 &#xff08;二&#xff09; 全程参与的质量经理 &#xff08;三&#xff09; 合理的质量控制流程 1&#xff0e; 质量管理规范&#xff1a; 2&#xff0e; 加强协调管理&…

模块计算机类型“x64”与目标计算机类型“x86”冲突

在使用DDS过程中&#xff0c;nddscpp2.lib(nddscpp2.dll) : fatal error LNK1112: 模块计算机类型“x64”与目标计算机类型“x86”冲突。 问题原因为lib库为64位&#xff0c;而编译器选择的是32位。