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

结构体:
         虽然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

.的优先级高于*

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

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

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

相关文章

微软密谋超级AI大模型!LangChain带你轻松玩转大模型开发

此前&#xff0c;据相关媒体报道&#xff0c;微软正在研发一款名为MAI-1的最新AI大模型&#xff0c;其参数规模或将达5000亿以上&#xff0c;远超此前微软推出的相关开源模型&#xff0c;其性能或能与谷歌的Gemini 1.5、Anthropic的Claude 3和OpenAI的GPT-4等知名大模型相匹敌。…

Linux文本处理三剑客(详解)

一、文本三剑客是什么&#xff1f; 1. 对于接触过Linux操作系统的人来说&#xff0c;应该都听过说Linux中的文本三剑客吧&#xff0c;即awk、grep、sed&#xff0c;也是必须要掌握的Linux命令之一&#xff0c;三者都是用来处理文本的&#xff0c;但侧重点各不相同&#xff0c;a…

Sam Altman微软Build 2024最新演讲:AI可能是下一个移动互联网

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

【C++11】lambda匿名函数和包装器

目录 一&#xff0c;lambda匿名函数 1-1&#xff0c;lambda的引入 1-2&#xff0c;lambda表达式书写格式 1-3&#xff0c;lambda函数的名称 1-4&#xff0c;lambda捕获列表的使用 1-5&#xff0c;函数对象与lambda表达式 二&#xff0c;包装器 2-1&#xff0c;function…

如何使用maven运行SpringBoot程序?

目录 一、什么是maven 二、什么是SpringBoot 三、如何使用maven运行SpringBoot程序&#xff1f; 一、什么是maven Maven&#xff1a;简化Java项目构建的自动化工具 在软件开发的世界里&#xff0c;Maven以其强大的项目管理和构建自动化功能&#xff0c;为Java开发者提供了…

容器化:ES和Kibana

1 缘起 最近在学习使用ES&#xff0c; 为了找一个功能强大的可视化工具&#xff0c;之前使用了ES-Head&#xff0c;可以满足学习需求。 闲暇时间又折腾了另一个工具Kibana&#xff0c; 分享如下。 Kibana优点&#xff1a; 用户友好性&#xff1a;Kibana提供直观易用的用户界面…

Strategy设计模式

Strategy设计模式举例。 看图&#xff1a; 代码实现&#xff1a; #include <iostream>using namespace std;class FlyBehavior { public:virtual void fly() 0; };class QuackBehavior { public:virtual void quack() 0; };class FlyWithWings :public FlyBehavior …

数据库(vb.net+OleDB+Access)简易学生信息管理系统

在我们日常生活当中&#xff0c;数据库一词往往离不开我们的编程界&#xff0c;在学校、仓库等方面起着存储数据及数据关系作用的文件。相较于Excel&#xff0c;Access可以存储无限多的记录&#xff0c;内容也十分丰富&#xff0c;例如文本、数字、日期、T&F等。而且不需要…

k8s命令式对象管理和配置

kubectl补全: # dnf install -y bash-completion # echo "source <(kubectl completion bash)" >> ~/.bashrc # kubectl completion bash > /etc/bash_completion.d/kubectl 命令式对象管理 kubectl命令 # 查看所有pod kubectl get pod # 查看某个po…

LLM——探索大语言模型在心理学方面的应用研究

1. 概述 心理学经历了多次理论变革&#xff0c;目前人工智能&#xff08;AI&#xff09;和机器学习&#xff0c;特别是大型语言模型&#xff08;LLMs&#xff09;的使用&#xff0c;预示着新研究方向的开启。本文详细探讨了像ChatGPT这样的LLMs如何转变心理学研究。它讨论了LL…

docker- 镜像 导出导入

文章目录 前言docker- 镜像 导出导入1. 导出2. 删除镜像3. 导入镜像 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&…

忘记“也是一门学问:机器如何忘记自己学到的知识?

在信息时代&#xff0c;我们常常希望人工智能能够学到更多的知识&#xff0c;变得更加智能。但你是否想过&#xff0c;有时候让机器"忘记"一些它学到的东西&#xff0c;也是一件很重要的事&#xff1f; 随着用户隐私保护意识的提高和相关法律法规的出台&#xff0c;…

深入理解内联函数(C语言)

目录 1.什么是内联函数2.内联函数与宏3.编译器对内联函数的处理4.参考文献 1.什么是内联函数 很多人都会知道&#xff0c;可以将比较小的函数写成内联函数的形式&#xff0c;这样会节省函数调用的开销&#xff0c;具体是什么样的开销呢&#xff1f; 一个函数在执行过程中&…

IDEA通过tomcat运行注意事项

配置run--》edit configurations 以下的A B部分要保持一致 A和B的路径要保持一致

前端vue项目遇到的问题01——那些初级问题

前端vue项目遇到的问题01——那些初级问题 1. npm install 问题1.1 依赖冲突1.1.1 详细问题1.1.2 报错原因1.1.3 解决问题1.1.3.1 方式1——无视冲突1.1.3.1 方式2——更换依赖版本 1.2 nodejs版本问题1.3 node版本正确的情况&#xff08;audit问题&#xff09;&#xff08;这个…

HTML5新特性、JS【初识JS 、JS核心语法】--学习JavaEE的day47

day47 HTML5新特性 定义文档类型 在文件的开头总是会有一个标签 语言文档类型声明方式html4<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">html5<!DOCTYPE html> 新增语义化标签 理解&…

vite-plugin-vue-devtools插件

vite-plugin-vue-devtools插件旨在帮助开发者更快地理解并调试Vue应用。它通过提供全面的功能和直观的界面&#xff0c;以图形化的方式展示应用程序状态&#xff0c;使开发者能够更方便地查看和管理Vue应用的各个方面。此外&#xff0c;该插件还支持Vue3.0版本&#xff0c;并且…

【Go专家编程——内存管理——垃圾回收】

垃圾回收 所谓的垃圾就上不在需要的内存块&#xff0c;垃圾如果不清理&#xff0c;这些内存块就没有办法再次被分配使用。在不支持垃圾回收的编程语言中&#xff0c;这些垃圾内存就上泄露的内存。 1. 垃圾回收算法 常见的垃圾回收算法有3种 引用计数&#xff1a;对每个对象…

yolov10 快速使用及训练

参考: https://docs.ultralytics.com/models/yolov10/ ultralytics其实大多数系列都能加载使用: 官方: https://github.com/THU-MIG/yolov10.git 代码参考: https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/train-yolov10-object-…

一篇文章讲透排序算法之希尔排序

希尔排序是对插入排序的优化&#xff0c;如果你不了解插入排序的话&#xff0c;可以先阅读这篇文章&#xff1a;插入排序 目录 1.插入排序的问题 2.希尔排序的思路 3.希尔排序的实现 4.希尔排序的优化 5.希尔排序的时间复杂度 1.插入排序的问题 如果用插入排序对一个逆序…