C语言入门Day_26 结构体

news2024/11/20 13:42:40

目录

前言:

1.结构体的定义 

2.结构体的使用

3.易错点

4.思维导图 


前言:

变量只能表示单一的属性,比如用int去表示一个年龄,用float去表示一个身高或一个体重,一个字符串/字符数组去表示一个性别或一个名字。

int tony_age = 18;
float tony_height = 172.0;
float tony_weight = 74.0;

而真实世界里面的事物往往有多个属性。比如一个人它既有年龄,身高,体重,也有名字,性别,

在C语言中我们使用一种特殊的数据结构来表示它,它就叫做struct结构体)。

1.结构体的定义 

1.1

truct又叫结构,或者结构体,往往包含多个不同数据类型的变量。

下面我们来看一看一个struct的定义:

struct People
{
    char name[20]; 
    int age;     
    float height;   
    float weight;
}; 

1.struct关键字,声明这是一个struct结构体

struct

2.struct名,又叫结构名

People

3.struct中的第一个成员,一个字符数组name

char name[20];

4.struct中的第二个成员,一个整型变量int

int age;

struct People
{
    char name[20]; 
    int age;     
    float height;   
    float weight;
}; 

5.struct中的第三个成员,一个浮点型变量height

float height;

6.struct中的第四个成员,一个浮点型变量weight

float weight;

7.结构中的成员需要用花括号{}括起来

{

}

1.2

我们来自己定义一个结构体Book,它有三个成员,字符数组name,整型页数pages,浮点型价格price。

struct Book
{
    char name[20]; 
    int pages;     
    float price;   
};  

 1.先填入结构体关键字struct

 2.再填入结构体的名字Book

 3.然后填入花括号{}

4.分别填入三个不同成员的数据类型

定义了一个struct结构体以后,我们就可以用它来定义一个结构体变量,这个结构体变量的数据类型当然就是这个我们定义好的struct了。

1.3

我们来看看如何定义一个结构体变量:

struct People
{
    char name[20]; 
    int age;     
    float height;   
    float weight;  
}; 
struct People people_a;
struct People people_b;

1.结构体的定义

struct People { }

2.用结构体People声明一个变量people_a

3.声明变量也需要用到结构体关键字struct

4.结构体的名字People

5.用结构体People声明的变量people_b

1.4

我们也可以使用下面的方式来定义一个结构体变量,在结构体的末尾加上变量的名字。但我们还是推荐上面这种,代码更清晰,理解成本也会更低一点。 

struct Book
{
  char name[20]; 
  int pages;   
  float price;  
} book_a;  

1.5

完成结构体和结构体变量的定义以后,我们就可以开始对它进行赋值和使用

首先是赋值

struct People
{
    char name[20]; 
    int age;     
    float height;   
    float weight;  
}; 
struct People people_a;
people_a = {"Liming", 19, 178.0, 75.0};

1.结构体的定义

struct People{}

2.用定义好的结构体People来声明一个变量people_a

struct People people_a;

3.给变量进行赋值

people_a = {"Liming", 19, 178.0, 75.0};

struct People
{
    char name[20]; 
    int age;     
    float height;   
    float weight;  
}; 
struct People people_a;
people_a = {"Liming", 19, 178.0, 75.0};

4.第一个给变量name赋值"Liming"

5.第二个给变量age赋值19

6.第三个给变量height赋值178.0

7.第四个给变量weight赋值75.0

1.6

需要注意的是,我们是给struct的成员按照顺序,挨个赋值的。 

struct Book
{
    char name[20]; 
    int pages;     
    float price;   
};  
struct Book book_a;
book_a
book_a = {"ABC", 100, 15.0};

1.我们来给结构体Book定义的变量进行一次赋值,注意对应的顺序,先填入变量名book_a

代码编辑器。

2.然后填入赋值符号=和花括号{}

3.依次填入三个结构体成员变量的数值,第一个是"ABC",注意数据类型的对应:

4.然后是pages的值,100:

5.最后是浮点变量price的值15.0:

到这里我们就完成了一个结构体的定义,结构体变量的声明,和结构体变量的赋值了。

2.结构体的使用

2.1

前面我们更多在讲解语法细节上面。需要注意的是,struct的定义需要在main函数前面(外部),就像函数的定义一样。

除了一次性给全部结构体成员进行赋值以外,我们也可以根据需要给单个结构体变量进行赋值。

2.2

这是一个期末考试成绩单的结构体Record,我们来给它单个成员进行赋值: 

struct Record
{
    float yuwen;
    float shuxue;
    float yingyu;
};
int main() {
    struct Record record_2023;
    record_2023.yuwen = 99.5;
    record_2023.shuxue = 100.0;
    record_2023.yingyu = 98.5;
}

1.定义结构体Record

struct Record{}

2.声明一个结构体变量record_2023

struct Record record_2023;

3.给结构体成员变量yuwen赋值99.5

record_2023.yuwen = 99.5;

struct Record
{
    float yuwen;
    float shuxue;
    float yingyu;
};
int main() {
    struct Record record_2023;
    record_2023.yuwen = 99.5;
    record_2023.shuxue = 100.0;
    record_2023.yingyu = 98.5;
}

4.给结构体成员变量shuxue赋值100.0

record_2023.shuxue = 100.0;

5.给结构体成员变量yingyu赋值98.5

ecord_2023.yingyu = 98.5;

6.main函数,结构体的定义需要放在main函数以外

int main () {}

7.我们注意到它的访问方式是通过点.来实现的

2.3

结构体变量访问自己成员是通过英文句号.来实现的:

​
record_2023.yuwen = 99.5;

对结构体里面单个成员变量进行赋值访问的方式都是一样的,通过英文符号.来实现

2.4

struct Record
{
    float yuwen;
    float shuxue;
    float yingyu;
};
int main() {
    struct Record record_2025 = {90.0, 93.5, 98.0};
    printf("%.1f\n", record_2025.yuwen);
    printf("%.1f\n", record_2025.shuxue);
    printf("%.1f\n", record_2025.yingyu);
}

1.定义一个结构体Record

struct Record { };

2.定义一个结构体变量,并进行初始化赋值

struct Record record_2025 = {90.0, 93.5, 98.0};

3.打印输出这个结构体变量的三个数值

printf("%.1f\n", record_2025.yuwen);

printf("%.1f\n", record_2025.shuxue);

printf("%.1f\n", record_2025.yingyu);

4.同样的,我们通过英语句号.来访问结构体的成员

2.5

指针,作为C语言最灵活的机制(有人也说指针是C语言的精髓所在),也可以用来指向一个结构体,我们来看看:

定义一个某种结构体的指针,并指向一个变量,然后访问它:

struct Record
{
    float yuwen;
    float shuxue;
    float yingyu;
};
int main() {
    struct Record record_2025 = {90.0, 93.5, 98.0};
    struct Record *sp1;
    sp1 = &record_2025; 
    printf("%f\n", sp1->yuwen);
    sp1->yuwen = 100.0;
    printf("%f\n", sp1->yuwen);
}

1.定义一个Record结构的指针

struct Record *sp1;

2.把指针指向结构体变量record_2025

sp1 = &record_2025;

3.打印结构体变量yunwen

printf("%f\n", sp1->yuwen);

4.指针去访问一个结构体成员使用->符号

5.以及对于结构体来说,不需要使用指针运算符*

sp1->yuwen

2.6

一个结构体的指针和一个普通变量的指针,在使用上最大的区别就是,普通变量的指针需要使用指针运算符*来访问,结构体的指针则不需要

使用结构体变量访问成员的时候,是用英文句号.

使用结构体指针来访问成员的时候,是用减号+右箭头符号->

2.7

我们自己来写一遍用结构体指针访问成员的代码

struct Record record_2025 = {90.0, 93.5, 98.0};
struct Record *sp1;
sp1 = &record_2025; 
printf("%.1f\n", sp1->yuwen);
sp1->yuwen = 100.0;
printf("%.1f\n", sp1->yuwen);

1.填入结构体指针访问成员的符号->

2.填入指针访问成员的代码:

sp1->yuwen

3.易错点

结构体定义和声明后面记得不要丢掉分号!

输出每个结构体成员时应该对应该类型的格式符。

4.思维导图 

最后我想说的是:

 在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。

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

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

相关文章

2023年腾讯云服务器优惠活动整理汇总

腾讯云是腾讯集团倾力打造的云计算品牌,为了吸引更多的用户,腾讯云经常会推出各种各样的优惠活动。本文将为大家整理汇总一些腾讯云服务器的优惠活动,希望能够帮助到需要购买腾讯云服务器的用户。 一、腾讯云服务器优惠券 腾讯云优惠券是腾讯…

创建型设计模式——工厂模式

摘要 本博文主要介绍软件设计模式中工厂模式,其中工厂设计模式的扩展为简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)三种。 一、简单工厂(Simple Factory) 主要分析设计模式 - 简单工厂(Simple Factory),它把实例…

腾讯大牛耗时1个月整理的“JVM学习笔记“深入底层,面面俱到!

为什么要学习JVM? 1、 程序调优2、 排查程序运行问题3、 掌握了程序执行的根本和原理4、 规避写代码时候的一些错误5、 应付面试6、 掌握了其他语言的通用机制 怎么有效的学习JVM? 以上了解了学习JVM的种种好处,但是怎么有效的学习JVM呢&a…

029-从零搭建微服务-消息队列(一)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

1992-2021年省市县经过矫正的夜间灯光数据(GNLD、VIIRS)

1992-2021年省市县经过矫正的夜间灯光数据(GNLD、VIIRS) 1、时间:1992-2021年3月,其中1992-2013年为年度数据,2013-2021年3月为月度数据 2、来源:1992-2013年来源于DMSP、2013-2021年3月来自VIIRS 3、范…

spring AOP源码阅读分析

理论知识 AOP是面向切面编程(Aspect Oriented Programming)的意思。定义一些切点(pointcut),然后可以在切点织入一些通知(advice),对切点方法进行代理增强,与核心业务逻辑分离开来,以提高系统的可维护性、可扩展性和重…

网工内推 | 网络工程师,软考证书优先,六险一金,包吃

01 科力信息 招聘岗位:网络工程师 职责描述: 1、负责蚌埠项目的设备安装及调试; 2、对边界网络运行中的监控、故障排除、问题处理。 任职要求: 1、2年及以上网络相关工作经验,有交通管理网络运维经验优先&#xff1b…

【移动端测试工具】Appium自动化测试工具安装与配置

文章目录 一、JAVA环境配置检查是否已安装java jdk 二、android SDK安装1.下载android sdk压缩包2.解压压缩包3.安装SDK Manager4.sdk环境变量配置5.验证sdk是否安装成功 三、node JS安装1.下载node.js安装包2.安装node.js3.环境配置4.测试完成验证5.安装淘宝镜像并检验是否安装…

Android MeasureSpec测量规格

文章目录 Android MeasureSpec测量规格概述MeasureSpec组成常用APIMeasureSpec源码分析getChildMeasureSpec源码分析总结 Android MeasureSpec测量规格 概述 MeasureSpec指View的测量规格,MeasureSpec是View的一个静态内部类。 View的MeasureSpec是根据自身的布局…

SoloX:Android和iOS性能数据的实时采集工具

SoloX:Android和iOS性能数据的实时采集工具 github地址:https://github.com/smart-test-ti/SoloX 最新版本:V2.7.6 一、SoloX简介 SoloX是开源的Android/iOS性能数据的实时采集工具,目前主要功能特点: 无需ROOT/越狱…

Java调用操作系统命令的输出乱码问题解决

本篇解决的问题 使用Java 的Runtime调用操作系统的命令,出现异常时使用getErrorStream()获取错误信息的字节流,转换该字节流为字符串显示时,出现乱码。 Java调用操作系统命令 这里以Windows 操作系统为例, 调用cd 命令切换路径…

SAP 销售订单审批状态参数设置

定义权限码 BS52 Spro->控制->内部订单->订单主数据->状态管理->定义状态管理授权码 创建状态参数文件 BS02 SPRO->销售与分销->销售->销售凭证->定义并分配状态参数文件->定义状态参数文件 1)命名,描述 设置对象类型:销…

记录一个iOS UITableView 正在刷新的时候修改数据源导致的崩溃

首先看一下崩溃堆栈信息 由于tableview 调用layoutsubViews 执行到代理方法 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 由于是崩溃在系统方法里面的,我们无法直接看到是因为调用哪个方法导致的崩溃 后来…

秦时明月沧海手游礼包码,秦时明月沧海兑换码

在玩《秦时明月沧海》手游时,你可能会遭到礼包码的诱惑。如果你还没找到可用的兑换码,这里有一些可供使用的礼包码,赶快领取吧! 关注【娱乐天梯】,获取内部福利号 1. 礼包码:QIN0809 包含:金镒…

面试打底稿⑤ 项目一的第一部分

简历原文 抽查部分 项目描述 该项目旨在服务广州地区的快递物流,实现了下单、快递员取派件、订单转运单、线路规划、网点设置等功能。 责任描述 登录系统优化,双token三验证模式实现设置token状态、提高登录安全性的效果 模拟问答 1.能简单介绍一下…

2023-9-27 JZ18 删除链表的结点

题目链接: 删除链表的结点 import java.util.*;/** public class ListNode {* int val;* ListNode next null;* public ListNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请…

【C++】友元函数 ( 友元函数简介 | 友元函数声明 | 友元函数语法 | 友元函数声明不受访问控制限制 | 友元函数参数要求 )

文章目录 一、友元函数简介二、友元函数声明1、友元函数语法2、友元函数声明不受访问控制限制3、友元函数参数要求4、友元函数示例 三、完整代码示例 - 友元函数 一、友元函数简介 在 C 语言中 , " 友元函数 " 是 与 类 相关联的函数 , " 友元函数 " 不是…

【Verilog 教程】6.6Verilog 仿真激励

关键词:testbench,仿真,文件读写 Verilog 代码设计完成后,还需要进行重要的步骤,即逻辑功能仿真。仿真激励文件称之为 testbench,放在各设计模块的顶层,以便对模块进行系统性的例化调用进行仿真…

对象存储,从单机到分布式的演进

关于数据存储的相关知识,请大家关注“数据存储张”,各大平台同名。 通过《什么是云存储?从对象存储说起》我们对对象存储的历史、概念和基本使用有了一个大概的认识。而且我们以Minio为例,通过单机部署的模式实际操作了一下对象存储的GUI,感受了一下对象存储的用法。 在上…

word中使用latex多行公式,矩阵公式

\eqarray{H& [h(x_1)^T,\cdots,h(x_N)^T]^T \\ & [\matrix{g(w_1 x_1b_1) & \cdots & g(w_L x_1b_L) \\ \vdots & \ddots & \vdots \\ g(w_1 x_Nb_1) & \cdots & g(w_L x_Nb_L)}]_{N \times L}}&的引起的那条竖线可以通过backspace或者del…