当前位置: 首页 > news >正文

结构体数据类型使用的一些注意点

1.结构体定义时的注意事项:

1.错误定义结构体:

struct students
{char name[9] = "Mike";int height = 185;
};

  这是不对的,在 C 语言中,这是由语言的设计原则所决定的。结构体的定义(struct declaration)只是决定了数据的布局和类型。在这个期间,并没有为这些数据分配内存。只有当你声明一个特定的结构体变量时,内存才会被分配,并且你可以在此时为它赋值(初始化)。这是因为结构体定义是用于创建一种新的类型,而不是创建一个变量。类型是一种抽象的概念,没有实际的存储空间,所以不能为其直接赋值。

2.正确定义结构体:

  在 C 语言中,你不能在结构体定义的时候直接赋初值。应该在声明结构体变量的时候,或是在定义之后,对单个变量进行初始化操作。

比如:

struct students
{char name[9];int height;
};// 在声明变量时进行初始化
struct students aStudent = {"John", 180};// 或在定义后对单个变量进行初始化
aStudent.height = 180;
strcpy(aStudent.name, "John");

2.结构体变量赋值:

在C语言中,主要有三种方式可以为结构体变量赋值:

//1. 声明时初始化:
struct student {char name[10];int age;
} stu = {"Tom", 20};


  在这个例子中,我们在声明student结构体的时候同时创建了一个名为stu的变量,并为其赋值了初始值。

//2. 使用**句点运算符**(.):
struct student stu;
strcpy(stu.name, "Tom");
stu.age = 20;

  在这个例子中,我们首先声明了一个名为stu的student结构体变量,然后使用句点运算符为其各成员赋值。这里就要注意,字符数组或字符串赋值最好使用string.h包含的strcpy()函数赋值,方便很多。

//3. **复制另一个相同类型的结构体变量**:
struct student stu1 = {"Tom", 20};
struct student stu2 = stu1;

  这个方法在交换两个结构变量时非常好用,以下举个快速排序学生成绩(由高到低)的示例,展示如何使用以上所说注意事项。

// 引用所需的头文件
#include<stdio.h>
#include<stdlib.h>// 定义结构体类型,并为成员分配内存空间
typedef struct students
{char name[9]; // 学生姓名,允许的最大长度为8个英文字母int height;   // 学生身高,区间在30-300之间
} Students;// 快速排序算法函数实现
void quick_sort(Students student[], int left, int right)
{int i = left;int j = right;Students temp1;Students temp2 = student[left];if (i > j){return; // 递归终止条件,i大于j时,返回上一级}while (i != j){// 从右往左找比temp2.height值小的学生while (student[j].height <= temp2.height && i < j){j--;}// 从左往右找比temp2.height值大的学生while (student[i].height >= temp2.height && i < j){i++;}// 交换两个学生位置if (i < j){temp1 = student[i];student[i] = student[j];student[j] = temp1;}}// 将基准值放在正确的位置student[left] = student[i];student[i] = temp2;// 递归调用快速排序算法处理基准值左侧的学生quick_sort(student, left, i - 1);// 递归调用快速排序算法处理基准值右侧的学生quick_sort(student, i + 1, right);
}int main()
{// 输入数据int N = 0; // 总人数Students student[10001];// 输入学生总数Nscanf("%d", &N);// 逐行输入学生的名字和身高for (int i = 0; i < N; i++){scanf("%s %d", student[i].name, &student[i].height);}// 使用快速排序算法将学生按身高升序排序quick_sort(student, 0, N - 1);// 输出排序后的学生名单for (int i = 0; i < N; i++){printf("%s %d\n", student[i].name, student[i].height);}return 0;
}

  注意看代码中在交换两个结构变量时,可以直接把一个变量值赋值给另一个相同类型的结构变量,非常方便,这里要记住这个用法

运行结果:

//测试用例:
Tom 188
Mike 170
Eva 168
Tim 160
Joe 190
Ann 168
Bob 175
Nick 186
Amy 160
John 159//输出结果:
Joe 190
Tom 188
Nick 186
Bob 175
Mike 170
Eva 168
Ann 168
Tim 160
Amy 160

相关文章:

结构体数据类型使用的一些注意点

1.结构体定义时的注意事项&#xff1a; 1.错误定义结构体&#xff1a; struct students {char name[9] "Mike";int height 185; }; 这是不对的&#xff0c;在 C 语言中&#xff0c;这是由语言的设计原则所决定的。结构体的定义&#xff08;struct declaration&…...

Serverless化云产品超40款 阿里云发布全球首款容器计算服务

10月31日&#xff0c;杭州云栖大会上&#xff0c;阿里云宣布推出全球首款容器计算服务ACS&#xff0c;大幅提升操作的易用性并节省20%资源成本&#xff0c;真正将Serverless理念大规模落地&#xff0c;同时阿里云 Serverless化进程进入快车道&#xff0c;有超40款云产品提供了S…...

最小化安装移动云大云操作系统--BCLinux-R8-U2-Server-x86_64-231017版

有个业务系统因为兼容性问题&#xff0c;需要安装el8.2的系统&#xff0c;因此对应安装国产环境下的BCLinuxR8U2系统来满足用户需求。BCLinux-R8-U2-Server是中国移动基于AnolisOS8.2深度定制的企业级X86服务器通用版操作系统。本文记录在DELL PowerEdge R720xd服务器上最小化安…...

索引创建的原则

索引的创建是数据库优化中非常重要的一部分&#xff0c;正确创建索引可以大大提高查询效率。以下是一些创建索引时需要考虑的原则&#xff1a; 根据查询频率创建索引&#xff1a; 频繁用于检索的列&#xff1a; 那些频繁用于查询的列或经常出现在 WHERE、JOIN、ORDER BY 和 GR…...

动态表单生成Demo(Vue+elment)

摘要&#xff1a;本文将介绍如何使用vue和elment ui组件库实现一个简单的动态表单生成的Demo。主要涉及两个.vue文件的书写&#xff0c;一个是动态表单生成的组件文件&#xff0c;一个是使用该动态表单生成的组件。 1.动态表单生成组件 这里仅集成了输入框、选择框、日期框三种…...

JMeter断言之JSON断言

JSON断言 若服务器返回的Response Body为JSON格式的数据&#xff0c;使用JSON断言来判断测试结果是较好的选择。 首先需要根据JSON Path从返回的JSON数据中提取需要判断的实际结果&#xff0c;再设置预期结果&#xff0c;两者进行比较得出断言结果。 下面首先介绍JSON与JSON…...

LuatOS-SOC接口文档(air780E)--mqtt - mqtt客户端

常量 常量 类型 解释 mqtt.STATE_DISCONNECT number mqtt 断开 mqtt.STATE_SCONNECT number mqtt socket连接中 mqtt.STATE_MQTT number mqtt socket已连接 mqtt连接中 mqtt.STATE_READY number mqtt mqtt已连接 mqttc:subscribe(topic, qos) 订阅主题 参数 …...

安装Python环境

Python 安装包下载地址&#xff1a;https://www.python.org/downloads/ 打开该链接&#xff0c;可以看到有两个版本的 Python&#xff0c;分别是 Python 3.x 和 Python 2.x&#xff0c;如下图所示&#xff1a; Python下载页面截图 图 1 Python 下载页面截图&#xff08;包含…...

[nodejs] 爬虫加入并发限制并发实现痞客邦网页截图

今晚想给偶像的相册截个图,避免某一天网站挂了我想看看回忆都不行,用的是js的木偶师来爬虫台湾的部落格,效果图大概是这样,很不错 问题来了.我很贪心, 我想一次性把相册全爬了,也就是并发 ,这个人的相册有19个!!我一下子要开19个谷歌浏览器那个什么进程, 然后程序就崩了, 我就想…...

GEE——Publisher Data Catalogs发布者数据目录

发布者数据目录 发布者数据目录由数据集发布者策划&#xff0c;供更大范围的 Google 地球引擎社区使用&#xff0c;并作为地球引擎资产集公开共享。这些目录并非由 Google 编制。这里是GEE团队简政放权的一个过程&#xff0c;也就是说这些数据集的后续更新和维护并不由GEE团队负…...

计算10的阶乘

一、不好的写法 public static void main(String[] args) {long fun fun(10);System.out.println(fun);}public static long fun(long n) {if (n 1) {return 1;}return n * fun(n - 1);}使用递归完成需求&#xff0c;fun1方法会执行10次&#xff0c;并且第一次执行未完毕&…...

6.卷积神经网络

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 卷积层一、从全连接到卷积二、卷积层三、代码四、QA No.2 卷积层里的填充和步幅一、填充和步幅二、D2L代码注意点三、QA No.3 卷积层里的多输入和多输出通道一、多输入和多输出通道二、D2L代码注意点三、QA No.4 池化层…...

postgresql|数据库|SQL语句冲突的解决

前言&#xff1a; postgresql数据库是比较复杂的一个关系型数据库&#xff0c;而有些时候&#xff0c;即使是简单的插入更新操作也是有很多复杂的机制。 那么&#xff0c;什么是冲突&#xff1f;什么时候会遇到冲突&#xff08;也就是冲突的常见场景&#xff09;&#xff1f;…...

overflow溢出属性、定位、前端基础之JavaScript

overflow溢出属性 值 描述 visible 默认值。内容不会被修剪&#xff0c;会呈现在元素框之外。 hidden 内容会被修剪&#xff0c;并且其余内容是不可见的。 scroll 内容会被修剪&#xff0c;但是浏览器会显示滚动条以便查看其余的内容。 auto 如果内容被修剪&#xff0…...

【JS】Chapter6-Dom 获取属性操作

站在巨人的肩膀上 黑马程序员前端JavaScript入门到精通全套视频教程&#xff0c;javascript核心进阶ES6语法、API、js高级等基础知识和实战教程 &#xff08;六&#xff09;Dom 获取&属性操作 以下的变量可以将 let 改为 const&#xff1a; let arr [red, green] arr.pu…...

太极培训机构展示服务预约小程序的作用如何

太极是适合男女老幼的&#xff0c;很多地方也有相关的学校或培训机构&#xff0c;由于受众广且不太受地域影响&#xff0c;因此对培训机构来说&#xff0c;除了线下经营外&#xff0c;线上宣传、学员获取和发展也不可少。 接下来让我们看下通过【雨科】平台制作太极教培服务预…...

node使用path模块的基本使用

文章目录 一、path.resolve(常用)二、path.sep三、path.parse其他 一、path.resolve(常用) 由于node 中使用 __dirname 获取的绝对路径是/ ,而我们拼接的路径为‘/’导致路径不统一。 作用&#xff1a;拼接规范的绝对路径 const fs require(fs) const path require(path)// 1…...

我和云栖大会有个约会

前言 云栖大会&#xff08;Alibaba Cloud Computing Conference&#xff09;是中国阿里巴巴集团旗下的云计算技术盛会&#xff0c;旨在推动云计算技术的发展和应用。该大会自2009年首次举办以来&#xff0c;已成为云计算行业内规模最大、影响力最广的会议之一。 云栖大会每年…...

Linux各个发行版之间的关系

Linux各个发行版之间的关系 可以查看链接&#xff1a;Linux Timeline 链接中可以下载PNG或者SVG图片...

第一章 第一行Android代码

一、Android简介 1.android系统架构 linux kernel&#xff08;Linux内核层&#xff09;&#xff1a;提供硬件底层驱动 libraries&#xff08;系统运行库层&#xff09;&#xff1a;提供了主要的特性支持&#xff0c;如SQLite库、Webkit库&#xff1b;还包含android runtime&…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...