C语言——结构体(入门)

news2025/1/19 11:36:21

文章目录

  • 1.结构体的声明
    • 1.1.结构体是什么?
    • 1.2.结构体的声明
    • 1.3.结构体的定义和初始化
  • 2.结构体成员的访问
  • 3.结构体传参

1.结构体的声明

1.1.结构体是什么?

在生活中往往很难用一个准确的数据类型来描述一个物体,例如一本书,描述它的书名、作者以及出版社,需要用字符型数组来表示。当描述它的价格时,需要整型变量来表示。所以需要定义一个结构体来修饰它,结构体是一些值的集合,这些值是结构体的成员变量。结构体的每个成员可以是不同类型的变量。

1.2.结构体的声明

结构体声明的语法如下

struct tag–结构体名称
{
mumber_list;–结构体成员
}variable_list;–结构体变量

struct stu
{
	char name[20];
	char gender[10];
	float score;
};//这里的分号不能忘

这里定义了一个结构体stu,成员有 char name[20];char gender[10];float score; 。

注意:
结构体的成员可以是变量、数组、指针,甚至可以是其他的结构体。

1.3.结构体的定义和初始化

struct stu
{
	char name[20];
	char gender[10];
	int age;
	float score;
}s0; //定义一个全局结构体变量s0

int main()
{
	struct stu s1 = {"zhangsan", "male", 18, 99.5f};//定义一个局部结构体变量s1并初始化
	return 0;
}

下面我再举另一个例子

struct S
{
	int i;
	char c;
};

struct S1
{
	float f;
	struct S s;//结构体内嵌套声明结构体变量
	double d;
};

int main()
{
	struct S1 ss = { 3.14f,{18, 'c'}, 2.14};//嵌套定义并初始化结构体变量
	return 0;
}

2.结构体成员的访问

结构体成员的访问需要借助 “.” 成员访问操作符来进行访问。例如

#include<stdio.h>

struct stu 
{
	char name[20];
	char gender[15];
	float score; 
};
int main()
{
	struct stu s1 = {"zhangsan", "male", 59.5f};
	printf("%s %s %f\n",s1.name, s1.gender, s1. score);
	return 0;
}

在这里插入图片描述
当指针访问结构体成员时,有时得到的并不是一个结构体变量,而是一个结构体指针。这时我们可以通过(->)操作符来进行访问

#include<stdio.h>

struct stu 
{
	char name[20];
	char gender[15];
	float score; 
};

void Print(struct stu* s1)
{
	printf("%s %s %f\n", s1->name, s1->gender, s1->score);
}

int main()
{
	struct stu s1 = {"zhangsan", "male", 59.5f};
	Print(&s1);
	return 0;
}

在这里插入图片描述

3.结构体传参

struct S
{
 int data[1000];
 int num;
};
struct S s = {{1,2,3,4}, 1000};
//结构体传参
void print1(struct S s)
{
 printf("%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps)
{
 printf("%d\n", ps->num);
}
int main()
{
 print1(s);  //传结构体
 print2(&s); //传地址
 return 0;
}

在结构体传参中,如果使用传值调用的话,那么在创建数据压栈时,寄存器需要额外为结构体变量创建临时空间,程序性能会有所下降,如果使用创址调用,只需要通过指针对结构体变量进行操作,传参时可以大大减少寄存器的压力,这样可以使程序运行效率更高。

结论:在结构体传参时,尽量使用传址的方式进行传参。

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

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

相关文章

编码技巧——Mybatis分页插件PageHelper使用

本篇介绍Mybatis分页插件PageHelper的使用&#xff0c;本质上是Mybatis拦截器起作用&#xff0c;在执行目标SQL之前添加count语句及拼接limit到目标SQL后面&#xff0c;这里不再赘述&#xff0c;Mybatis拦截器相关知识可参考Mybatis——拦截器Interceptor&#xff0c;本篇仅简单…

12_AJAX

知识点1【定时器】&#xff08;重要&#xff09; 知识点2【日期Date对象】 知识点3【Math数学对象】&#xff08;了解&#xff09; ​编辑 知识点4【string对象】 indexof函数&#xff1a; substring()函数&#xff1a; 知识点5【全局函数】&#xff08;了解&#xff09; …

Android使用高德地图实现运动轨迹绘制和轨迹回放

功能的实现完全是使用高德地图进行实现的&#xff0c;先看一下效果图吧&#xff01; 下图是在绘制轨迹的过程&#xff1a; 下图是在轨迹回放的过程&#xff1a; 下图是记录运动的时间区间&#xff1a; 其实这个实现起来还是很容易的&#xff0c;总体逻辑就是&#xff1a;定位—…

Meter接口测试使用教程哪里找?

接口测试是测试工程师的必备技能之一&#xff0c;运用JMeter工具一步步实现接口请求&#xff0c;数据参数化&#xff0c;断言等操作&#xff0c;通过常见的企业实际测试场景详解JMeter各项技术使用&#xff0c;最后结合Jenkins持续集成实现企业级小程序接口自动化测试&#xff…

数据结构(6)树形结构——平衡二叉树(JAVA代码实现)

目录 6.1.概述 6.2.AVL树 6.2.1.概述 6.2.2.旋转 1.RR旋转 2.LL旋转 3.LR旋转 4.RL旋转 6.2.3.代码实现 6.1.概述 二叉搜索树存在一个问题&#xff0c;就是树的姿态和数据的插入顺序是有关系的&#xff0c;有时候树会变成某一边的子树高度过高&#xff0c;甚至直接退化成…

百度联合哈尔滨发布城市大模型“冰城-百度·文心”, 助力城市智能化建设

本文已在【飞桨PaddlePaddle】公众号平台发布&#xff0c;详情请戳链接&#xff1a;百度联合哈尔滨发布城市大模型“冰城-百度文心”&#xff0c; 助力城市智能化建设 近日&#xff0c;哈尔滨市人民政府与百度携手&#xff0c;联合发布面向城市领域的行业大模型——冰城-百度文…

PyTorch学习笔记-损失函数与反向传播

1. 损失函数 具有深度学习理论基础的同学对损失函数和反向传播一定不陌生&#xff0c;在此不详细展开理论介绍。损失函数是指用于计算标签值和预测值之间差异的函数&#xff0c;在机器学习过程中&#xff0c;有多种损失函数可供选择&#xff0c;典型的有距离向量&#xff0c;绝…

【Oracle系列4】Oracle 数据库的层次结构,常见的GUI连接用具

【Oracle系列4】Oracle 数据库的层次结构 跟mysql不一样&#xff0c;mysql连上后能看到所有库&#xff0c;库下面直接就是表了。 跟pgsql也不一样&#xff0c;pgsql连上后&#xff0c;也是可以看到所有库&#xff0c;库下面是schema&#xff0c;schema下面才是表&#xff08;…

G1D25-蜜汁APEX-RAGA代码运行友友第一次跑模型

一、APEX 英伟达开发的&#xff0c;压缩数据的框架 &#xff08;一&#xff09;安装bug 直接安装 https://blog.csdn.net/weixin_47658790/article/details/115055505 &#xff08;二&#xff09;运行bug 然后运行又出现了bug----------------------- IndexError: tuple …

沉睡者IT - 10个问题说清楚:什么是元宇宙?

欢迎关注沉睡者IT&#xff0c;点上面关注我 ↑ ↑ 人们对于元宇宙的构想十分多元且抽象&#xff0c;这十个问题将抽象的元宇宙具象化&#xff0c;帮助人们更好地理解。 一、什么是元宇宙&#xff1f; 1)元宇宙概念的提出 元宇宙在很长一段时间内仅存在于文学与影视作品中。…

一、spring框架的演变

1.微服务架构的演进过程 1.1 单体架构单机部署 1.运行在tomcat里面&#xff0c;并发量QPS一般在200多个请求左右&#xff0c;同一个jvm进程&#xff0c;直接import就行。 2.不同的功能模块可能只用文件夹区分。 3.缺点&#xff1a;并发量太小&#xff08;如果是电商系…

【pygame游戏】用Python实现一个蔡徐坤大战篮球的小游戏,可还行?【附源码】

Python制作坤坤打篮球小游戏序言准备工作开发环境效果预览开始界面游戏规则结束游戏代码实现序言 话说在前面&#xff0c;我不是小黑子~ 我是超级大黑子&#x1f60f; 表弟大周末的跑来我家&#xff0c;没事干天天骚扰我&#xff0c;搞得我都不能跟小姐姐好好聊天了&#xf…

【813. 最大平均值和的分组】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给定数组 nums 和一个整数 k 。我们将给定的数组 nums 分成 最多 k 个相邻的非空子数组 。 分数 由每个子数组内的平均值的总和构成。 注意我们必须使用 nums 数组中的每一个数进行分组&#xff0c;…

3DMAX森林树木植物插Forest Pack Pro 预设库安装教程

Forest Pack是世界上最流行的3dMax森林树木植物散布插件。它提供了一个完整的解决方案来创建广阔的物体区域&#xff0c;从树木和植物到建筑物、人群、骨料、地面覆盖物、岩石等等。模拟大型场景总是非常困难&#xff0c;但这个插件可以帮助您以较少的难度进行模拟。 Forest P…

最近面试 Java 开发的感受:就以平时项目经验面试,通过估计很难

在上周&#xff0c;我密集面试了若干位 Java 后端的候选人&#xff0c;工作经验在 3 到 5 年间。我的标准其实不复杂&#xff1a;第一能干活&#xff0c;第二 Java 基础要好&#xff0c;第三最好熟悉些分布式框架&#xff0c;我相信其它公司招初级开发时&#xff0c;应该也照着…

CountDownLatch

目录 1 前言 2 常用方法 3 示例 4 解析 4.1 countDown() 4.2 await() 源码 1 前言 countDownLatch&#xff08; 门阀、 计数器&#xff09;是多线程控制的一种工具 &#xff0c;它用来协调各个线程之间的同步。 countDownLatch相当于一个计数器&#xff0c;能够使…

51单片机学习笔记3 C51数据类型及最小系统

51单片机学习笔记3 C51数据类型一、 C51数据类型1. 基本类型2. C51扩充数据类型3. C51运算量&#xff08;1&#xff09;常量&#xff08;2&#xff09;变量&#xff08;3&#xff09;位运算符&#xff08;4&#xff09;逗号运算符4. 数组二、51 最小系统构成1. 晶振电路2. 复位…

EIGRP_协议知识点

EIGRP协议一、汇总1.配置(接口下)2.修改AD值(全局下)二、Stub特性2.1实验配置:三、路由泄露四、控制路由更新工具-Distribute-list(分发列表)一、汇总 EIGRP的自动汇总&#xff1a;EIGRP自动汇总只能汇总本地产生的路由&#xff0c;不能汇总从邻居学习的路由&#xff0c;会自动…

聊聊雪花算法?

随便聊聊 哈喽&#xff0c;大家好&#xff0c;最近换了份工作&#xff0c;虽然后端技术栈是老了点&#xff0c;但是呢&#xff0c;这边的前端技术确是现在市面上最新的那一套技术&#xff1a;Vue3ViteTSXPinaElement-PlusNativeUI。我本人主要是学后端的&#xff0c;确被拉去做…

2022王道OS 1.2 操作系统的发展与分类

2022 王道OS 操作系统的发展与分类 文章目录2022 王道OS 操作系统的发展与分类知识总览OS的发展与分类手工操作阶段批处理阶段--单道批处理系统批处理阶段--多道批处理系统分时操作系统实时操作系统其他几种OS知识回顾与重要考点文章目录2022 王道OS 操作系统的发展与分类知识总…