结构体;结构成员访问操作符

结构体:
         虽然c语言已经提供了内置类型,比如:char、short、int、long等,但还是不够用,就好比我描述一个人,我需要描述他的身高,体重,年龄,名字等信息,各种信息类型都不大一样。这时c语言为了解决这个问题,就增加了结构体这种自定义的数据类型,让程序员可以自己创造适合的类型。
   注: 结构是一些被称为”成员变量“的值的集合,结构的每一位成员可以是不同类型的变量,比如:标量、数组、指针、甚至是其他的结构体。

结构体的关键字:struct

结构体中涉及两个操作符
.
->

这两个操作符都被成为:成员访问操作符,我们会在下面使用的时候介绍如何使用的

其中成员访问又分为直接间接两种。
结构体是用来描述一个复杂对象,它里面可以包含多个属性,结构体就是创造一个新的类型(自定义类型),这里还是以描述一个人作为一个例子,如下代码所示:

struct person    //person是自定义的名称
{
	int high;//身高
	float weight;//体重
	int age;//年龄
	char name[10];//名字
};//这里的分号必须写

结构体就是这么创建的,也很简单,struct是关键字,不可以缺少,在关键字后面自己任意定义一个名称 ,当然这个名称有实际意义的话最好,接着下面在大括号里将所需要的变量全部陈列出来,最后要在最后的大括号外加上英文分号(这点是最容易丢失的,要切记)。

结构体类型介绍完了,那么下面接着介绍如何创建结构体变量

方式一:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
int main()
{
    struct person c1;
    struct person c2;
    struct person c3;
	return 0;
}

方式二:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
}c1,c2,c3;
int main()
{
    c1;
    c2;
    c3;
	return 0;
}

方法三:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
struct person c1;
struct person c2;
struct person c3;
int main()
{
    c1;
    c2;
    c3;
	return 0;
}

方法一中创建的是局部变量,而方法二、三中创建的是全局变量 ,在实际运用中一定要注意这一点,否则很容易造成程序错误。

结构体变量和之前学习的变量创建还是很类似的,学习的时可以放在一起进行对比,这样可以加深理解,更容易掌握理解。

结构体变量的初始化:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
int main()
{
  
    struct person c1 = {60,180,22,"名字"};
     
	return 0;
}

在这里结构体变量初始化就是按照结构体内包含的变量类型顺序,将每一个被包含的数据按原类型包含在内。就比如上面的代码表示的那样。

如果你不按照结构体里的顺序初始化,那么你必须在初始化的时候指定你初始化的内容,如下面代码表示:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
int main()
{
  
    struct person c1 = {.name="名字",.high=180,.age=22,.weight=60};
     
	return 0;
}

 这里就使用了成员访问操作符当然结构体里面也可以包含结构体,初始化的方法,形式和上面的方法,形式都差不多,下面就举个简单的小例子吧,如下:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
struct student
{
    char id[10];
    char gender;
    struct person 1;
};
int main()
{
  
    struct student 1 = {"2023011111","男",{60,180,22,"名字"}};
    
	return 0;
}

以上访问结构体都是直接访问,都是直接访问结构体 ,接下来我们将学习间接访问结构体,这个就需要介绍 -> 这个操作符了(指针)。

语法:指针->成员名

结构体指针用于存储结构体变量的地址,可以通过指针来访问和修改结构体的成员变量。

下面我们还是给出一段代码演示:

在表示指针t指向的结构体成员时,,->age的作用就相当于(*t).age, 推荐使用->运算符,也就是将(*t).age写成t->age

.的优先级高于*

下面是使用指针修改结构体的值 ,很简单,就不细说了。

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

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

相关文章

类与对象:接口

一.概念 接口&#xff08;英文&#xff1a;Interface&#xff09;&#xff0c;在JAVA编程语言中是一个抽象类型&#xff0c;是抽象方法的集合&#xff0c;接口通常以interface来声明。 二.语法规则 与定义类相似&#xff0c;使用interface关键词。 Idea可以在开始时直接创建…

《计算机网络微课堂》1-6 计算机体系结构

常见的计算机网络体系结构 从本节课开始&#xff0c;我们要用 4 次课的时间来介绍有关计算机网络体系结构的知识&#xff0c;具体包含以下内容&#xff1a; 一&#xff0c;常见的计算机网络体系结构二&#xff0c;计算机网络体系结构分层的必要性三&#xff0c;计算机网络体系…

使用OpenCV dnn c++加载YOLOv8生成的onnx文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…

力扣刷题---2418. 按身高排序【简单】

题目描述 给你一个字符串 数组 names &#xff0c;和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i&#xff0c;names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 示例 1&…

力扣刷题---961. 在长度 2N 的数组中找出重复 N 次的元素【简单】

题目描述&#x1f357; 给你一个整数数组 nums &#xff0c;该数组具有以下属性&#xff1a; nums.length 2 * n. nums 包含 n 1 个 不同的 元素 nums 中恰有一个元素重复 n 次 找出并返回重复了 n 次的那个元素。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,3] 输…

微服务中使用Maven BOM来管理你的版本依赖

摘要: 原创出处 sf.gg/a/1190000021198564 「飘渺Jam」欢迎转载&#xff0c;保留摘要&#xff0c;谢谢&#xff01; 为什么要使用BOM? 如何定义BOM? 项目使用方法? BOM&#xff08;Bill of Materials&#xff09;是由Maven提供的功能,它通过定义一整套相互兼容的jar包版…

93.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-增强技能信息显示后进行分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

STM32中断编程入门

文章目录 一、 理论部分1.中断系统2.中断执行流程3.NVIC的基本结构4.EXTI介绍5.AFIO复用IO口 二、实验目的&#xff1a;学习stm32中断原理和开发编程方法。使用标准完成以下任务&#xff1a;&#xff08;一&#xff09;实验一 开关控制LED的亮灭1.代码部分2.运行结果 &#xff…

网络空间安全数学基础·整除与同余

主要内容&#xff1a; 整除的基本概念&#xff08;掌握&#xff09; 素数&#xff08;掌握&#xff09; 同余的概念&#xff08;掌握&#xff09; 1.1整除 定义&#xff1a;设a&#xff0c;b是任意两个整数&#xff0c;其中b≠0&#xff0c;如果存在一个整数q&#xff0c;使 …

如何网页在线编辑 Office word 文档,并支域功能:创建域/插入域/替换域等

在日常在线办公场景中&#xff0c;我们经常会遇到一些复杂的文档编辑需求&#xff0c;特别是我们经常会遇到一些复杂的数学公式&#xff0c;会用到“域”功能&#xff0c;“域”功能便是一个高级且实用的工具。通过设置域&#xff0c;用户可以实现文档的自动化处理&#xff0c;…

卷积神经网络CNN动态演示和输出特征图计算公式

目录 一、卷积运算 1、卷积&#xff08;Convolution&#xff09; 2、填充&#xff08;Padding&#xff09; &#xff08;1&#xff09;Valid Padding &#xff08;2&#xff09;Same Padding 3、步长 4、卷积核大小为什么一般为奇数奇数&#xff1f; 5、卷积核kernel和…

【C++】哈希和unordered系列容器

目录 一、unordered系列关联式容器的引入 二、容器使用 2.1 unordered_map的文档说明 2.2 unordered_map的使用 2.3 unordered_set 三、底层结构 3.1 哈希概念 3.2 哈希表 3.3 哈希冲突 3.4 哈希函数 3.5 哈希冲突解决 3.5.1 闭散列 3.5.2 开散列 3.5.3 思考 四…

【微积分】CH16 integrals and vector fields听课笔记

【托马斯微积分学习日记】13.1-线积分_哔哩哔哩_bilibili 概述 16.1line integrals of scalar functions [中英双语]可视化多元微积分 - 线积分介绍_哔哩哔哩_bilibili 16.2vector fields and line integrals&#xff1a; work circulation and flux 向量场差不多也是描述某种…

Vitis HLS 学习笔记--控制驱动任务示例

目录 1. 简介 2. 代码解析 2.1 kernel 代码回顾 2.2 功能分析 2.3 查看综合报告 2.4 查看 Schedule Viewer 2.5 查看 Dataflow Viewer 3. Vitis IDE的关键设置 3.1 加载数据文件 3.2 设置 Flow Target 3.3 配置 fifo 深度 4. 总结 1. 简介 本文对《Vitis HLS 学习…

Android面试题之Kotlin常见集合操作技巧

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 list 创建和修改 不可变list,listOf var list listOf("a","d","f") println(list.getOrElse(3){"Unkn…

《计算机网络微课堂》2-5 信道的极限容量

本节课我们介绍信道极限容量的有关问题。 我们都知道信号在传输过程中会受到各种因素的影响&#xff0c;如图所示&#xff0c;这是一个数字信号&#xff0c;‍‍当它通过实际的信道后&#xff0c;波形会产生失真&#xff0c;当失真不严重时&#xff0c;在输出端‍‍还可根据以失…

Mysql教程(0):学习框架

1、Mysql简介 MySQL 是一个开放源代码的、免费的关系型数据库管理系统。在 Web 开发领域&#xff0c;MySQL 是最流行、使用最广泛的关系数据库。MySql 分为社区版和商业版&#xff0c;社区版完全免费&#xff0c;并且几乎能满足全部的使用场景。由于 MySQL 是开源的&#xff0…

力扣刷题---409. 最长回文串【简单】

题目描述 给定一个包含大写字母和小写字母的字符串 s &#xff0c;返回 通过这些字母构造成的 最长的回文串 。 在构造过程中&#xff0c;请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。 示例 1: 输入:s “abccccdd” 输出:7 解释: 我们可以构造的最长的回文串…

Docker部署SpringBoot项目(jar包+Mysql)

部署Java项目 项目准备准备Java项目镜像准备配置网络 部署项目细节展示 项目准备 准备Java项目 hmall项目是一个maven聚合项目&#xff0c;使用IDEA打开hmall项目&#xff0c;查看项目结构如图&#xff1a; 我们要部署的就是其中的hm-service&#xff0c;其中的配置文件采用…

Java网络编程之TCP协议核心机制(三)

题外话 最近学习内容很多嗷 正题 延时应答机制 当客户端发送数据到服务器时,服务器不会立即返回ACK,而是等待一会再返回ACK 这段等待时间应用程序可能会消化掉接收缓冲区中的数据,当服务器返回ACK时,就会携带此时接收缓冲区大小的信息 当客户端下次再发送数据的时候就可以…