深入探索C语言中的结构体:定义、特性与应用

news2025/6/6 22:30:16

在这里插入图片描述

🔥 个人主页:大耳朵土土垚

在这里插入图片描述

目录

  • 结构体的介绍
  • 结构体定义
  • 结构成员的类型
  • 结构体变量的定义和初始化
  • 结构体成员的访问
  • 结构体传参

结构体的介绍

在C语言中,结构体是一种用户自定义的数据类型,它允许开发者将不同类型的变量组合在一起,形成一个新的数据类型。结构体可以包含多个成员变量,每个成员可以是不同的数据类型,例如整型、字符型、浮点型等。

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

结构体定义

结构体的定义使用关键字struct,后面跟随结构体的名称。

例如描述一个人:

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

上述代码定义了一个名为Person的结构体,它包含三个成员变量:name、age和height。name是一个字符型数组,有20个元素;age是一个整型变量;height是一个浮点型变量。

结构成员的类型

结构成员的类型可以是以下几种:

  1. 基本数据类型:包括整型(int)、浮点型(float)、字符型(char)、布尔型(bool)等。
  2. 枚举类型:表示一组具有离散值的变量。
  3. 结构体类型:用来定义多个不同类型的变量,形成一个新的数据类型。结构体中可以包含基本数据类型、枚举类型、数组、指针等。
  4. 指针类型:表示变量的地址。
  5. 数组类型:表示一组相同类型的变量。
  6. 函数类型:表示函数的参数和返回值类型。

这些类型可以在结构体中作为成员类型,用于定义结构体的成员变量。

结构体变量的定义和初始化

结构体变量定义有两种方式,一种在声明时候直接定义,一种在使用时再定义:

struct Point
{
 int x;
 int y;
}p1; //声明类型的同时定义变量p1

//需要使用时
struct Point p2; //定义结构体变量p2

定义变量的同时初始化:

struct Point p3 = {1, 2};//定义结构体变量p3并赋值1和2

结构体嵌套初始化:

struct Node
{
 int data;
 struct Point p;
 struct Node* next; 
}n1 = {10, {4,5}, NULL}; //结构体嵌套初始化

struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化

结构体成员的访问

  1. 通过点操作符(.)访问结构变量的成员:

点操作符接受两个操作数。

例如:

struct Stu        //类型声明
{
 char name[15];//名字
 int age;      //年龄
};

struct Stu s = { "tutu",20};
printf("%s,%d", s.name, s.age);//使用.访问s中的成员
  1. 结构体指针访问指向变量的成员:
struct Stu        //类型声明
{
 char name[15];//名字
 int age;      //年龄
};

struct Stu s = { "tutu",20};
struct Stu* ps = &s;
printf("%s,%d", ps->name, ps->age);//使用->访问ps指向的结构体成员

结构体传参

结构体传参可以通过以下两种方式:

  1. 传值传参

将结构体的副本传递给函数。

//结构体传值传参
void print1(struct Stu s)
{
	printf("%d\n", s.age);
}
struct Stu s = { "tutu",20};
print1(s);

  1. 传地址传参

将结构体的指针传递给函数,以便在函数内部修改结构体的内容。

//结构体地址传参
void print2(struct S* ps)
{
 printf("%d\n", ps->num);
}
struct Stu s = { "tutu",20};
print2(&s);

结构体传参的时候,要传结构体的地址。

这是因为函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。此外,传递结构体地址也便于我们修改结构体的内容。

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

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

相关文章

适用于Mac和Windows的最佳iPhone恢复软件

本文将指导您选择一款出色的iPhone数据恢复软件来检索您的宝贵数据。 市场上有许多所谓的iPhone恢复程序。各种程序很难选择并选择其中之一。一旦您做出了错误的选择,您的数据就会有风险。 最好的iPhone数据恢复软件应包含以下功能。 1.安全可靠。 2.恢复成功率高…

郭明錤:苹果将为Vision Pro推出红外摄像头款AirPods

在科技界,苹果公司的每一次创新都备受瞩目。近日,著名苹果分析师郭明錤透露了一个令人振奋的消息:苹果计划在2026年推出配备红外摄像头的新款AirPods,这款耳机将特别优化与Apple Vision Pro头显的空间体验。这一消息不仅预示着苹果在音频设备领域的又一次技术飞跃,也进一步…

One day for Chinese families

周围生活中的普通家庭的一天流程: 【上班的一天】 【放假的一天】 有家庭的人,上班流程: 01)准备早餐,牛奶,面包 02)叫娃娃起床,一般要蛮久的;沟通交流 -- 哄娃娃 -- 生气…

【Linux进阶】文件系统8——硬链接和符号连接:ln

在Linux下面的链接文件有两种, 一种是类似Windows的快捷方式功能的文件,可以让你快速地链接到目标文件(或目录);另一种则是通过文件系统的inode 链接来产生新文件名,而不是产生新文件,这种称为硬链接&…

html+css+js图片手动轮播

源代码在界面图片后面 轮播演示用的几张图片是Bing上的&#xff0c;直接用的几张图片的URL&#xff0c;谁加载可能需要等一下&#xff0c;现实中替换成自己的图片即可 关注一下点个赞吧&#x1f604; 谢谢大佬 界面图片 源代码 <!DOCTYPE html> <html lang&quo…

前端面试题9(JavaScript数组去重)

1. 使用Set ES6引入了Set数据结构&#xff0c;它只存储唯一的值&#xff0c;因此可以用来快速去重。 function uniqueWithSet(arr) {return [...new Set(arr)]; }// 示例 console.log(uniqueWithSet([1, 2, 2, 3, 4, 4, 5])); // 输出: [1, 2, 3, 4, 5]2. 使用indexOf或inclu…

Poker Game, Run Fast

Poker Game, Run Fast 扑克&#xff1a;跑得快 分门别类&#xff1a; 单张从小到大默认 A < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K 跑得快&#xff1a;单张从小到大 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 &…

第二次练习

目录 一、student表的增删改查 1.向student表中添加一条新记录 2. 向student表中添加多条新记录 3.向student表中添加一条新记录 4.更新表&#xff0c;grade 大于90的加0.5 5.删除成绩为空的记录 二、用户权限部分 1、创建一个用户test1使他只能本地登录拥有查询student表的权…

比赛获奖的武林秘籍:03 好的创意选取-获得国奖的最必要前提

比赛获奖的武林秘籍&#xff1a;03 好的创意选取-获得国奖的最必要前提 摘要 本文主要介绍了大学生电子计算机类比赛和创新创业类比赛创意选取的重要性&#xff0c;并列举了好的创意选取和坏的创意选取的例子&#xff0c;同时说明了好的创意选取具有哪些特点&#xff0c;同时…

当需要对大量数据进行排序操作时,怎样优化内存使用和性能?

文章目录 一、选择合适的排序算法1. 快速排序2. 归并排序3. 堆排序 二、数据结构优化1. 使用索引2. 压缩数据3. 分块排序 三、外部排序1. 多路归并排序 四、利用多核和并行计算1. 多线程排序2. 使用并行流 五、性能调优技巧1. 避免不必要的内存复制2. 缓存友好性3. 基准测试和性…

Qt(MSVC)下报“语法错误缺少“}““语法错误缺少“常数“ 的解决办法

1.现象 目前我在工程中试图使用QHttpServer时&#xff0c;一编译&#xff0c;就报了一堆奇奇怪怪的错误&#xff1a; D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:75: error: C2143: 语法错误: 缺少“}”(在“(”的前面) D:\Qt\httpServer\Qt5.15.…

最新扣子(Coze)实战案例:使用图像流做超分,模糊图片秒变清晰,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 关注斜杠君&#xff0c;可获取完整版教程。&#x1f44d;&#x1f3f…

Mysql中间件和高可用

文章目录 一、MySQL中间件代理服务器MycatMycat应用场景Mycat部署 实现读写分离 二、MySQL高可用高可用解决方案MHA高可用实现MHA 一、MySQL中间件代理服务器 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库&#xff08;非关系型数据库&#xff09;。 数据库主…

软考中级数据库系统工程师备考经验分享

前几天软考成绩出了&#xff0c;赶紧查询了一下发现自己顺利通过啦&#xff08;上午63&#xff0c;下午67&#xff0c;开心&#xff09;&#xff0c;因此本文记录一下我的备考经验分享给大家。因为工作中项目管理类的知识没有系统学习过&#xff0c;本来想直接报名软考高级证书…

7.6第三天作业

一、在数据库中创建一个表student&#xff0c;用于存储学生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); &#xff08;1.&#xff09;先创建一个数据库 &#xff08;2.&#xff09;创建student表 查看是否创建成功 1、向studen…

2024年软件测试八股文(含答案)

Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自…

基于SpringBoot+Vue的招生管理系统(带1w+文档)

基于SpringBootVue的招生管理系统(带1w文档&#xff09; 通过招生管理系统的研究可以更好地理解系统开发的意义&#xff0c;而且也有利于发展更多的智能系统&#xff0c;解决了人才的供给和需求的平衡问题&#xff0c;招生管理系统的开发建设&#xff0c;由于其开发周期短&…

NLP简介

自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此&#xff0c;这一领域的研究将涉及自…

2.pwn的linux基础(计算机内部数据结构存储形式)

linux基础 保护层级: 分为四个ring0-ring3 一般来说就两个&#xff0c;0和3 0为内核 3为用户 权限: 用户分为多个组 文件和目录等等的权限一般都是三个&#xff0c;即可读可写可执行。 读:R&#xff0c;写:W&#xff0c;执行:X 赋予一个可执行文件执行权限就是chmod x file…

快手大模型首次集体亮相,用AI重塑内容与商业生态

7月6日&#xff0c;在2024世界人工智能大会期间&#xff0c;快手举办了以“新AI新应用新生态”为主题的大模型论坛&#xff0c;会上&#xff0c;快手大模型首次集体亮相&#xff0c;视频生成大模型可灵、图像生成大模型可图等产品的多项新功能正式发布。 继图生视频、视频续写…