结构体变量的引用、结构体变量的初始化、结构体数组

一、 结构体变量的引用

在定义了结构体变量以后,当然可以引用这个变量。但应遵守以下规则:

  1. 不能将一个结构体变量作为一个整体进行输入和输出。例如,已定义studentl和 student2为结构体变量并且它们已有值。不能这样引用:

printf ("%d,%s,%c,%d,%f,%s\n",student1);

只能对结构体变量中的各个成员分别进行输入和输出。引用结构体变量中成员的方式为

结构体变量名.成员名

例如:studentl.num 表示 studentl变量中的 num 成员,即student1的num(学号)项。可以对变量的成员赋值,例如:

Student1.num=10010:

“.”是成员(分量)运算符,它在所有的运算符中优先级最高,因此可以把studentl.num 作为一个整体来看待。上面赋值语句的作用是将整数10010 赋给studentl变量中的成员

num。

(2)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。例如,对上面定义的结构体变量student1,可以这样访问各成员:

student1.num

student1. birthday.month

注意:不能用student1.birthday来访问studentl变量中的成员birthday,因为birthday 本身是一个结构体变量。

(3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。例如:

student2. score=studentl. score ;

sum=student1. score+student2.score;

student1.age++;

+ +student1. age;

由于“.”运算符的优先级最高,因此studen1l.age++是对student1.age进行自加运算,而不是先对age进行自加运算。

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

scanf(" %d",&student1. num); (输入 student1.num的值)

printf("%o",&student1); (输出 studentl的首地址)

但不能用以下语句整体读入结构体变量,如:

scanf("%d,%s,%c,%d,%f,%s",&student1);

结构体变量的地址主要用作函数参数,传递结构体变量的地址。

二、结构体变量的初始化

和其他类型变量一样,对结构体变量可以在定义时指定初始值。例 11.1对结构体变量初始化。

main ()

{struct student

{long int num;

char name[20];

char sex;

char addr[20];

}a=(89031,"Li Lin",'M' ,"123 Beijing Road"}:

printf("NO.:%ld\nname :%s\nsex:%c\naddress :%s\n",a.num,a.name ,a. sex,a.addr):

运行结果如下:

No.:89031

name:Li Lin

sex:M

address:123 Beijing Road

三、结构体数组

一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组,结构体数组与以肩介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员(分量)项。

1定义结构体数组

和定义结构体变量的方法相仿,只需说明其为数组即可。如:

struct student

{int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

}

struct student stu[3];

以上定义了一个数组stu,其元素为struct student类型数据,数组有3个元素,也可以直接定义一个结构体数组,如:

struct student

{int num ;

...

}stu[3];

struct

{int num;

}stu[3];

见图 11.4。

数组各元素在内存中连续存放,见图11.5示意。

1

2 结构体数组的初始化

与其他类型的数组一样,对结构体数组可以初始化。如:

struct student

{int num;

char name[20];

char sex;

int age;

float score;

} stu[3]=((10101."Li Lin",'M',18,87.5," 103 BeijingRoad"),(10102," Zhang Fun",'M',19,99,"130 Shanghai Road").{10104." Wang Min",'F',20,78.5,"1010 Zhongshan Road")):

定义数组 stu 时,元素个数可以不指定,即写成以下形式:

stu[]={{…},{…)(…)};

编译时,系统会根据给出初值的结构体常量的个数来确定数组元素的个数。一个结构体常量包括结构体中全部成员的值。

当然,数组的初始化也可以用以下形式:

struct student

{int num;

};

struct student stu[]={{…},{…},{…}};

即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。

从以上可以看到,结构体数组初始化的一般形式是在定义数组的后面加上:

=(初值表列};

3 结构体数组应用举例

下面举一个简单的例子来说明结构体数组的定义和引用。

例11.2对候选人得票的统计程序。设有3个候选人,每次输人一个得票的候选人的名字,要求最后输出各人得票结果。

程序如下:

# include <string.h>

struct person

{char name[20];

int count;

}leader[3]=("Li”,0," Zhang".0,"Fun",0);

main ()

{int i,j;

char leader-name[20];

for(i=1;<=10;i++)

{scanf("%s",leader-name);

for(j=0;j<3;j++)

if(strcmp (leader_name ,leader[i]. name)==0) leader[j]. count++;

printf("\n");

for(i=0;i<3;i++)

printf(" %5s : %d\n" ,leader[i]. name,leader[i].count);

}

运行情况如下:

Li

Li

Fan

Zhange

Zhangr

Fun

Li

Fun

Zhang

Li

Li:4

Zhang: 3

Fun : 3

程序定义一个全局的结构体数组leader,它有3个元素,每一元素包含两个成员 nume(姓名)和count(票数)。在定义数组时使之初始化,使3位候选人的票数都先置零。

见图11.6。

在主函数中定义字符数组leader_name, 它代表被选人的姓名,在10次循环中每次先输人一个被选人的具体人名,然后把它与3个候选人姓名相比,看它和哪一个候选人的名字相同。注意 leader_name是和leader[i].name相比,leader[j]是数组leader的第j个元素,它包含两个成员项,leader_name应该和 leader数组第j个元素的name成员相比。若j为某一值时,输入的姓名与leader[i].name相等,重执行“leader[j]. count++”,由于成员运算符“.”优先于自增运算符“++”,因此它相当于(leader[j].count)++,使leader[i]的成员count的值加1。在输人和统计结束之后,将3人的名字和得票数输出。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

idea报错Terminated with exit code 1

今天学项目的时候&#xff0c;中途打开一个新的项目&#xff0c;pom.xml文件一直在下载依赖&#xff0c;下载了很久都没有下载成功&#xff0c;检查自己的Maven配置&#xff0c;感觉没问题 把项目移动到没有中文的目录下重新启动&#xff0c;也还是不行&#xff0c;后来发现原…

硬核分享|AI语音识别转文字与自动生成字幕

硬核分享|AI语音识别转文字与自动生成字幕_哔哩哔哩_bilibili 在现代快节奏的生活中&#xff0c;语音转文字工具成为了我们工作和学习中的得力助手。它能够将我们说出的话语迅速转化为文字或者将语音视频自动生成字幕&#xff0c;提供便捷和高效。 语音转文字转字幕工具是一种…

nodejs安装使用React

1、react安装 首先&#xff0c;确保电脑上具备nodejs环境&#xff0c;之后用 winr 呼出控制台&#xff0c;输入 cmd 命令弹出cmd控制台&#xff08;小黑框&#xff09;之后在默认路径输入如下代码 npm i -g create-react-app //全局安装react环境无需选择特定文件夹安装成功后…

刷题DAY31 | LeetCode 455-分发饼干 376-摆动序列 53-最大子序和

455 分发饼干&#xff08;easy&#xff09; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并…

「发稿帮」权重媒体发稿的优势,资源有哪些?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体胡老师。 权重媒体发稿的优势主要包括以下方面&#xff1a; 获得更好的排名&#xff1a;高权重媒体在搜索引擎中的排名通常更靠前&#xff0c;这意味着在这些媒体上发布的内容更容易被用户发现和访问…

搞了半天blender整动画这么爽,骨骼重定向一回,动作就可以到处套用,和音频对轨也好使

我们搞到了运动数据&#xff08;可能是bvh文件&#xff0c;也可能是fbx文件&#xff09;之后&#xff0c;想要让某个静态的模型动起来。 我们假定用的是Tpose的模型&#xff08;因为我这个bvh文件是Tpose用的&#xff0c;所以为了动作映射不出问题&#xff0c;优先整的这种模型…

IPC网络摄像头媒体视屏流MI_VIF结构体

一个典型的IPC数据流 下图是一个典型的IPC数据流模型&#xff0c;流动过程如下&#xff1a; 1. 建立Vif->Vpe->Venc的绑定关系&#xff1b; 2. Sensor 将数据送入vif处理&#xff1b; 3. Vif 将处理后的数据写入Output Port申请的内存&#xff0c;送入下一级&#xff1b;…

基于python+vue的街道办管理系统flask-django-php-nodejs

在此基础上&#xff0c;结合现有街道办管理体系的特点&#xff0c;运用新技术&#xff0c;构建了以 python为基础的街道办管理信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;根据需求分析结果进行了系统的设计&#xff0c;并将其划分为管理员和用户二种角色和多个主…

GTC AI 2024:人工智能的未来展望

在2024年GTC AI大会上&#xff0c;NVIDIA推出了多项创新技术和产品&#xff0c;涵盖了从新一代GPU平台到AI超级计算和量子计算云服务等多个领域。 新一代GPU平台 Blackwell Blackwell是为生成式AI时代设计的新一代GPU平台&#xff0c;与前代相比&#xff0c;在FP8训练性能上提…

数据透视表进阶:多维数据透视表与案例演示

同比指的是&#xff1a;和去年比 环比指的是&#xff1a;和上个月比 小技巧&#xff1a;数据透视表消失了&#xff1a;点击字段列表 同比 右键---值的显示方式---差异--年&#xff08;上一个&#xff09; 环比 右键选择时间--然后选择月份 改小数点 组合 右键--组合--然后…

【mysql 127错误】mysql启动报错mysqld.service: Failed with result ‘exit-code‘.

无网环境&#xff0c;mysql 安装 出现如下错误 [rootmysql tools]# systemctl status mysqld.service ● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: failed (Result: exit-code) since…

Charles 工具如何做断点测试?

软件测试面试刷题&#xff0c;这个小程序&#xff08;永久刷题&#xff09;&#xff0c;靠它快速找到工作了&#xff01;&#xff08;刷题APP的天花板&#xff09;【持续更新最新版】-CSDN博客 在测试工作过程中&#xff0c;我们经常会在程序的某一行或者某一环节设置断点&…

对于HR来说,什么才是好的人才测评系统工具?

对于HR来说&#xff0c;选用一个合适的测评工具&#xff0c;我想不外乎以下几点&#xff1a; 1、成本可控 不是所有的HR都能申请到足够的资金&#xff0c;去做专业的人才测评&#xff0c;尤其是中小企业&#xff0c;这可是一笔不小 的开支。即使是基层普通岗位的成本&#xff…

Redis入门到实战-第二弹

Redis入门到实战 Redis安装官网地址Redis概述Redis-server安装Redis-stack-server使用(可选)Redisinsight安装(可选)更新计划 Redis安装 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是…

Typecho 博客文章评论添加显示 UserAgent(UA)的功能

本篇文章实现了为 Typecho 博客文章评论添加显示 UserAgent&#xff08;UA&#xff09;的功能本功能可替代 UserAgent 插件&#xff0c;更美观、简洁且好看 效果显示 大概就是这样了&#xff0c;实际效果请看我的评论&#xff01; 目前可以识别的操作系统以及浏览器 食用方…

NacosException: http error, code=403、NacosimeException——报错解决方法【Nacos2.x】

1、NacosException报错内容为&#xff1a; NacosException: http error, code403,msguser not found!,dataIdapplication-dev.yml,groupDEFAULT_GROUP,tenant连不上是因为成功开启鉴权后&#xff0c;所使用的Spring Cloud服务被拦截&#xff0c;需要在配置中添加Nacos用户名和…

深度学习图像处理02:Tensor数据类型

上一讲深度学习图像处理01&#xff1a;图像的本质&#xff0c;我们了解到图像处理的本质是对矩阵的操作。这一讲&#xff0c;我们讲介绍深度学习图像处理的基本数据类型&#xff1a;Tensor类型。 在深度学习领域&#xff0c;Tensor是一种核心的数据结构&#xff0c;用于表示和…

Vscode初建Vue时几个需要注意的问题

首先放图 注意点1.打开文件夹时&#xff0c;可以是VUE2 或者其他&#xff0c;但不能是VUE&#xff0c;会报错 注意点2.终端输入命令“npm init -y" npm init -y -y 的含义&#xff1a;yes的意思&#xff0c;在init的时候省去了敲回车的步骤&#xff0c;生成的默认的packag…

【三种方法】求一个整数存储在内存中二进制中的1的个数附两道课外练习题

题目&#xff1a;求一个整数存储在内存中的二进制中的1的个数 目录 法一&#xff1a;取模与取余 法二&#xff1a;按位与和移位操作符 法三&#xff1a;利用算法去掉二进制中最右边的1 课外练习1&#xff1a;用位运算判断一个数是否是2的次方数 课外练习2&#xff1a;编…

【Word自动化办公】使用python-docx对Word进行操作

目录 一、环境安装 二、文档各组成结构获取 2.1 组成结构讲解 2.2 段落run对象的切分标准 三、获取整篇文档内容 四、写入指定样式的数据 4.1 通过add_paragraph与add_run参数添加样式 4.2 单独设置文本样式 五、添加标题 六、换行符&换页符 七、添加图片数据 …