结构 数组

news2024/9/18 11:05:20

1.结构数组的定义        

        在C语言中,可以将数组定义为结构类型,他与普通数组的不同之处是结构数组的每一个元素都是一个结构类型的数据。

有以下三种定义方式

(1)先声明结构类型,再定义结构数组,格式如下:

struct结构名
{
    成员列表;
};
struct 结构名 数组名[元素个数][,数组名[元素个数],…];

(2)声明结构类型的同时定义结构数组,格式如下:

struct 结构名
{
成员列表;
}数组名[元素个数][,数组名[元素个数],…];

(3)直接定义结构数组,格式如下:

struct
{
    成员列表;
}数组名[元素个数][,数组名[元素个数],…];

让我们来简单定义一个结构数组

struct books
{
    int bno;
    char bname[20];
    char field[10];
    char author_[10];
    char publisher_[30];
    float price;
};
struct books book[5];

结构数组 book 共有5个元素,book[0]~book[4],每个数组元素都具有 struct books的结构类型。

2.结构数组的初始化

        结构数组在定义的同时也可以初始化,可进行部分初始化或全部初始化。结构数组初始化的一般形式为
 

struct 结构名 数组名[元素个数] = {初值表列};

        (1)在对结构数组进行初始化时,需遵循数组的初始化规律,可对其中的部分数组元素初始化,但是对结构数组元素中的每个成员都要进行初始化。

        (2)在对结构数组进行全部初始化时,初值的个数应当与结构数组的元素个数以及每个数组元素的成员个数相匹配。为了增强程序的可读性,最好用大括号将每一个数组元素的初值括起来。
        (3)当对结构数组的全部元素进行初始化时,可以省略数组的长度,系统根据初始化数据的多少来确定数组的长度。

3.结构数组的使用

        结构数组的使用也是通过引用结构数组元素的成员进行的。结构数组元素中成员的访问方法与结构变量成员的访问方法类似,通过成员运算符“.”来引用。另一方面,由于可以通过数组名以指针法形式来引用数组元素,因此对于结构数组元素成员的引用可以有如下几种形式:
(1)结构数组名[下标].成员名

(2)(*(结构数组名十下标)).成员名

(3)(结构数组名十下标)一>成员名

下面来进行实例运用

#include<stdio.h>
struct books    /*结构类型*/
{
    int bno;
    char bname[20],field[10],author[10],publisher[30];
    float price;
};
int main( )
{
struct books book[5]={
(101 , "clanguage" ,"computer" ,"xw","rmydpress" ,39},
{102, "vbprogramming" ,"computer" ,"zys" ,"qhdxpress" ,39};
{103 , "java" ,"computer","mj" ,"jxgypress" ,34},
(104 , "linearalgebra" ," math" ,"chc" ,"dzgypress" ,29.8),
{105, "clanguage" ,"computer" ,"thq" ,"qhdxpress" ,26}
};
printf(" %s\t%.2f\n" ,book[2]. bname,book[2].price+10);
printf("%s\t%.2f\n",(*(book+2)).bname,(*(book+2)),price+10);
printf("%s\t%.2f\n",(book+2)->bname,(book+2)->price+10);
return O;
}

        在实际应用中,结构数组也可以作为函数的参数,在函数间传递的是结构数组的首地址。即结构数组名作为函数的实参传递给对应的形参,实参和形参指向同一段内存空间,如被调用函数中改变了形参结构数组某个元素的成员值,则相应的实参结构数组元素的值也会发生改变。

我们来尝试一下结构数组作为函数参数的实例

#include<stdio. h>
struct ss( int a; int b; };
void fun(struct ss m[ ], int n)
{    int i,j,k;
struct ss temp;
for(i=0;i<n-1;i++)
{
     k=i;
for(j=i+1;j<n;j++)
if((m [j].a<m[k].a)||(m[j].a==m[k].a&.&m[j].b<m[k].b))
    k=j;
if(k!=i)
{    temp=m[i];m[i]=m[k];m[k]= temp;}

int main()
{
struct ss x[]={(5,3},{3,2},{3,6},(2,4},(5,8}};
int i,k=5;
fun(x,k);
for(i=0;i<k;i++)
printf("%d, %d\n",x[i].a, x[i].b);
return0;
}

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

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

相关文章

第3步VM的虚拟机无法用网络安装直接改用CDROM镜像包安装软件

精简版的CentOS只有ip add可用 ping命令可用其它软件版本太低都不能用&#xff0c;改用光盘镜像来安装软件。 步骤&#xff1a;1、修改Vm的设置&#xff0c;将光盘映像改为ISO文件。 步骤&#xff1a;2、在centos挂载cdrom 步骤&#xff1a;3、挂载成功后直接安装软件 发现软件…

认知杂谈68《燃爆!兄弟萌不可错过的人生开挂宝典》

内容摘要​&#xff1a; 生活如舞台&#xff0c;我们要做自己人生的导演兼主演。实现自我成长需打牢基础&#xff0c;如读《认知觉醒》等书并制定成长计划。 要向上生长&#xff0c;定短期和长期目标&#xff0c;学新技能、提升沟通能力&#xff0c;可借助在线平台和社群。用番…

面试经典150题——多数元素

目录 题目链接&#xff1a;169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;哈希表 Java写法&#xff1a; C写法&#xff1a; 解法二&#xff1a;它就在那里 Java写法&#xff1a; C写法&#xff1a; 解法…

求n至少为多大时,n个1组成的整数能被2013整除

题目&#xff1a;编写程序&#xff0c;求n至少为多大时&#xff0c;n个1组成的整数能被2013整除 #include<iostream> using namespace std; int main(){int n1;int m1;while(m%2013!0){m(m%2013)*101;n;}cout<<n<<endl;return 0; } 思路&#xff1a;直接用n…

2024年上海小学生古诗文大会倒计时一个月:做几道2024官方模拟题

2024年上海市小学生古诗文大会自由报名活动的初赛日期于10月19日开始&#xff0c;距离今天只有33天了。 那么如何准备2024年的小学生古诗文大会的自由报名初选呢&#xff1f;吃透&#xff08;记熟&#xff09;2024年小学生古诗文阅读专辑上的题目、知识点和往年真题及知识点。…

Linux memcg lru lock提升锁性能

内核关于per memcg lru lock的重要提交&#xff1a; f9b1038ebccad354256cf84749cbc321b5347497 6168d0da2b479ce25a4647de194045de1bdd1f1d 计算虚拟地址转换基本机制 为了处理多应用程序的地址冲突&#xff0c; linux 系统在应用中使用了虚拟地址&#xff0c;得益于硬件的…

【C++题目】1.日期差值

日期差值 题目&#xff1a; 链接&#x1f517;&#xff1a;日期差值 代码&#xff1a; #include <iostream> using namespace std; /* *思路&#xff1a; * 1. 分别求出每一个日期与0000年0月1日距离的天数 * 2. 两个距离天数相减即可得到两个日期相差的天数 *///平年…

AIGC图片相关知识和实战经验(Flux.1,ComfyUI等等)

最近看了网上的一些新闻&#xff0c;flux.1火出圈了&#xff0c;因此自己也尝试跑了一下&#xff0c;作图的质量还是蛮高的&#xff0c;在这里做个知识总结回顾。 flux.1是什么&#xff1f; 根据介绍&#xff0c;flux.1是由stable diffusion 一作&#xff0c;Stability AI的核…

基于ssm的个性化影片推荐系统设计与实现

需要项目源码请联系我&#xff0c;目前有各类成品 毕设 javaweb ssh ssm springboot等等项目框架&#xff0c;源码丰富。 专业团队&#xff0c;咨询就送开题报告&#xff0c;活动限时免费&#xff0c;有需要的朋友可以来咨询。 一、摘要 随着科学技术的飞速发展&#xff0c;社…

matlab DFT的点数与周期

只需要0——N-1个点就可以算得另一个域全部的信号 周期 时域信号的全部长度时一个周期&#xff0c;所以时域的周期化没有混叠 频域的周期与采样率有关&#xff0c;会混叠。 取一个周期进行傅里叶变换都是对于周期化后的信号取得&#xff0c;由于时域周期化不混叠&#xff0c;所…

全方位解读信息架构:从挑战到解决方案,推动企业数字化转型的全面指南

在数字经济迅猛发展的今天&#xff0c;信息架构 已经成为企业实现数字化转型、提高运营效率和优化 IT 投资的关键手段。无论是初创企业还是成熟企业&#xff0c;构建和实施有效的信息架构不仅能支持业务增长&#xff0c;还能确保数据安全和合规性。《信息架构&#xff1a;商业智…

node.js 中的进程和线程工作原理

本文所有的代码均基于 node.js 14 LTS 版本分析 概念 进程是对正在运行中的程序的一个抽象&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;操作系统的其他所有内容都是围绕着进程展开的 线程是操作系统能够进行运算调度的最小单位&#xff0c;其是进程中的一个执…

Zookeeper学习

文章目录 学习第 1 章 Zookeeper 入门1.1 概述Zookeeper工作机制 1.2 特点1.3 数据结构1.4 应用场景统一命名服务统一配置管理统一集群管理服务器动态上下线软负载均衡 1.5 下载zookeeper 第 2 章 Zookeeper 本地安装2.1 本地模式安装安装前准备配置修改操作 Zookeeper本地安装…

【三方演化博弈】模型构建与模型求解

一、背景介绍二、收益矩阵计算2.1 博弈主体策略2.2 概率2.3 具体公式2.4 计算过程&#xff08;1&#xff09;企业&#xff08;2&#xff09;政府&#xff08;3&#xff09;环境NGO 三、期望与复制动态方程3.1 企业平均期望3.2 政府平均期望3.3 环境NGO平均期望3.4 三方演化博弈…

旋转链表问题(python3)

旋转链表 问题描述解题思路代码实现 问题描述 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3] 链表中节点的数目在范围 [0, 500] 内-100 < Node.va…

robomimic基础教程(一)——基本概念

robosuite和robomimic都是由ARISE Initiative开发的开源工具&#xff0c;旨在推进机器人学习和机器人操作领域的研究。 一、基本概念 robomimic是一个用于机器人示范学习的框架。它提供了在机器人操作领域收集的大量示范数据集&#xff0c;以及用于从这些数据集中学习的离线学…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下打造EnBizCard个人电子名片

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统下打造EnBizCard个人电子名片 一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 一、EnBizCard介绍2.1 EnBizCard简介2.2 EnBizCard特点…

CSS调整背景

一、设置背景颜色 通过 background-color 属性指定&#xff0c;值可以是十六进制 #ffffff&#xff0c;也可以是rgb(0, 255, 255)&#xff0c;或是颜色名称 "red" div {background-color: red; /* 通过颜色名称设置 */background-color: #ff0000; /* 通过十六进制设…

数据结构和算法之线性结构

原文出处:数据结构和算法之线性结构 关注码农爱刷题&#xff0c;看更多技术文章&#xff01;&#xff01;&#xff01; 线性结构是一种逻辑结构&#xff0c;是我们编程开发工作应用最广泛的数据结构之一。线性结构是包含n个相同性质数据元素的有限序列。它的基本特征是&…

求和(2)

题目描述 输入两个正整数 l,r&#xff0c;编程计算 l(l1)(l2)...(r−1)r 的结果并输出。 输入格式 一行两个整数 l 和 r 输出格式 一个整数&#xff0c;根据题意计算后的结果 样例数据 样例输入#1 1 5样例输出#1 15样例输入#2 8 10样例输出#2 27数据范围 对于100%的…