[C语言入门] 结构体

目录

1. 啥是结构体

2. 啥是结构体变量

3. 创建结构体变量的小细节

3.1 创建全局结构体变量(不推荐)

3.2 创建局部结构体变量(不推荐)

3.3 创建局部结构体变量Plus

4. 结构体在内存里面咋存?

5. 结构体作为参数进行传递

5.1 结构体直接传参

5.2 结构体的地址传参


1. 啥是结构体

        结构体就是数据的集合,可以类比一下数组,数组是相同类型的集合;结构体对数据的异同没有任何要求;也就是说结构体是不同/相同类型的集合

2. 啥是结构体变量

        如果你学过面向对象的语言,可以把结构体变量理解为对象;如果你没有学过,那么可以把结构体理解为模版,结构体变量理解为根据模版来做的一些具体的东西;例如结构体人类,结构体变量张三,就是根据结构体人类模版来进行“制作”的具体的人。

#include <stdlib.h>
#include<string.h>// 结构体struct Person{char name[20];  };int main()
{struct Person zhangsan = {"zhangsan"}; // 结构体变量张三,是由结构体人类模版“制作”的printf("%s",zhangsan.name);return(0);
}

3. 创建结构体变量的小细节

3.1 创建全局结构体变量(不推荐)

        我们可以在写结构体的时候顺便把结构体变量定义了,这时候的结构体变量是“全局”的,存在一些问题。

#include <stdlib.h>// 结构体struct Person{char name[20];  }p1,p2; // 全局结构体变量

3.2 创建局部结构体变量(不推荐)

虽然作用域从全局到了局部,但是写起来还是有点麻烦。

#include <stdlib.h>// 结构体struct Person{char name[20];  };int main()
{struct Person p1,p2;// 局部结构体变量return 0;
}

3.3 创建局部结构体变量Plus

使用typedef 来简化创建结构体变量的流程。

#include <stdlib.h>// 结构体typedef struct Person{char name[20];  }P;int main()
{P p1,p2;// 局部结构体变量return 0;
}

4. 结构体在内存里面咋存?

        结构体本身在内存里面并不占用任何空间,当使用结构体创建结构体变量的时候,结构体变量占用内存空间,占用的内存空间跟结构体内的成员变量的大小总和一样。这很好理解,想象一下你拿着一个重量忽略不计的模具,此时重量为0,一旦使用这个模具制作一些“巧克力”、“冰块”,此时这些“巧克力、冰块”就有了重量。

5. 结构体作为参数进行传递

5.1 结构体直接传参

和普通变量传值一样,会额外创建一个临时的结构体变量,如果这个结构体变量占用内存很多,那么临时结构体变量就会占用那么多空间,不推荐。

#include <stdlib.h>
#include<string.h>
typedef struct Person
{char name[20]; 
}P;
// 使用结构体直接传参
void print_1(struct Person p1)// 形参:P p1也是可以的
{printf("%s\n",p1.name);
}int main()
{P z = {"张三"};print_1(z);return(0);
}

5.2 结构体的地址传参

使用地址传参,这样就需要创建一个指针变量,而指针变量的大小是一定的(4或者8个字节),所以不用担心内存占用的问题。

#include <stdlib.h>
#include<string.h>
typedef struct Person
{char name[20]; 
}P;// 使用结构体地址传参
void print_2(struct Person* p1)// 形参:P p1也是可以的
{printf("%s\n",p1->name);
}int main()
{P l = {"李四"};print_2(&l);return(0);
}

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

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

相关文章

贤小二c#版Yolov5 yolov8 yolov10 yolov11自动标注工具 + 免python环境 GPU一键训练包

贤小二c#版yolo标注训练工具集 欢迎使用贤小二AI标注训练系统v2.0 本课程所有演示程序全部免费 1、这节课程主要演示贤小二AI标注训练系统的使用&#xff0c;以及标注数据时注意事项和技巧&#xff1b; 2、本程序采用c# Net8.0框架开发&#xff0c;是贤小二开发的一款Yolo标注…

二分类交叉熵损失

二分类交叉熵损失&#xff08;Binary Cross-Entropy Loss&#xff09;是用于二分类问题的常见损失函数。它衡量的是模型输出的预测概率分布与真实标签之间的差异。 1 二分类问题 在二分类问题中&#xff0c;每个样本的目标输出是 0 或 1&#xff0c;表示样本属于某一类或另一类…

【C++】Cplusplus进阶

模板的进阶&#xff1a; 非类型模板参数 是C模板中允许使用具体值&#xff08;而非类型&#xff09;作为模板参数的特性。它们必须是编译时常量&#xff0c;且类型仅限于整型、枚举、指针、引用。&#xff08;char也行&#xff09; STL标准库里面也使用了非类型的模板参数。 …

关于pycharm远程连接服务器如何debug

1、pycharm远程连接只有pycharm专业版才可以&#xff0c;在校学生可以用学校邮箱申请。另外&#xff0c;网上电商也可以&#x1f92b; 2、远程连接有很多教程&#xff0c;可以参考的文章有很多。这里主要记录关于远程连接服务器debug遇到的一些问题。 3、由于远程连接服务器开…

数据结构每日一题day11(链表)★★★★★

题目描述&#xff1a;有一个带头结点的单链表L&#xff0c;请设计一个算法查找其第1个数据值为e的结点&#xff0c;若存在则返回指向该结点的指针&#xff0c;若不存在则返回 NULL。 算法思想&#xff1a; 输入检查&#xff1a;若链表为空&#xff08;仅有头结点&#xff09;&…

《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》

章节 6&#xff1a;日期选择器与日期处理 目标 学习如何使用DatePicker组件。理解日期格式化和日期计算。 内容 日期选择器基础 使用DatePicker组件。处理日期选择事件。 日期格式化 格式化日期为友好的文本。 日期计算 判断日期是否过期或即将到期。 代码示例 Entry Com…

迅饶科技X2Modbus网关-GetUser信息泄露漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 该漏洞的存在是由于GetUser接口在…

Go 原理剖析:数据结构之字符串

在 Go 语言中&#xff0c;字符串&#xff08;string&#xff09;是一个非常重要的数据类型。它看似简单&#xff0c;但背后却隐藏着不少有趣的原理和优化技巧。今天我们就来聊聊 Go 中字符串的底层结构、特性&#xff0c;以及如何高效地使用它。 1. 字符串的底层结构 字符串的…

【SPP】蓝牙链路控制(LC)在SPP中互操作性深度解析

在蓝牙协议栈的精密分层体系中&#xff0c;其链路控制&#xff08;Link Control, LC&#xff09;层作为基带层的核心组件&#xff0c;承载着物理信道管理、连接建立与维护等关键任务。其互操作性要求直接决定了不同厂商设备能否实现无缝通信。本文将以蓝牙技术规范中的LC互操作…

Windows C++ 排查死锁

开发出来应用程序突然间卡死不动&#xff0c;如果其中是因为死锁问题卡列该如何排查 下面是一个简单的死锁例子 #include <iostream> #include <thread> #include <mutex>std::mutex a, b;void function_a() {std::lock_guard<std::mutex> _x(a);std:…

【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

【易订货-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

GLPI 未授权SQL注入漏洞(CVE-2025-24799)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…

基于Deepface的情绪识别c++

基于Deepface的情绪识别c 文章目录 基于Deepface的情绪识别c简介下载模型并转为onnx&#xff08;facial_expression_model_weights.h5&#xff09;测试取出照片的人脸部分并处理成模型输入格式用模型推理一下看看结果 用onnxruntime的c库推理 简介 DeepFace是一个基于深度学习…

Java的数据库编程——JDBC基础

JDBC编程 一、概述1.1 概念介绍1.2 驱动包下载1.3 导入驱动包 二、通过Java程序操作数据库2.1 通过 JDBC 进行 插入数据 操作2.1.1 创建“数据源(DataSource)——描述要操作的数据库、数据是在哪”2.1.2 与服务器建立连接2.1.3 构造sql语句&#xff0c;并且对字符串类型的sql进…

DeepSeek-R1 面试题汇总

Deepseek-r1 面试宝典 原文地址&#xff1a;https://articles.zsxq.com/id_91kirfu15qxw.html DeepSeek-R1 面试题汇总 DeepSeek-R1 面试题汇总 GRPO&#xff08;Group Relative Policy Optimization&#xff09;常见面试题汇总篇 DeepSeek-R1 DeepSeek-R1-Zero 常见面试题汇总…

SSL/TLS

http ssl传输层 -> https 安全套接层 SSL/TLS 1、核心角色与文件2、证书生成流程2.1、生成CA根证书2.2、生成服务端证书2.3 生成客户端证书&#xff08;双向认证&#xff09; 3、SSL/TLS 认证模式3.1、单向认证&#xff08;默认 HTTPS&#xff09;3.2、双向认证&#xff0…

HTML 音频(Audio)学习笔记

一、HTML 音频概述 在 HTML 中&#xff0c;音频可以通过多种方式播放&#xff0c;但要确保音频在不同浏览器和设备上都能正常播放&#xff0c;需要掌握一些技巧。HTML5 引入了 <audio> 元素&#xff0c;为音频播放提供了一种标准方法&#xff0c;但在 HTML4 中&#xff…

php开发rest api,哪个框架最好

在 2025 年&#xff0c;选择适合开发 REST API 的 PHP 框架需要根据项目需求、性能要求和团队技术栈进行权衡。以下是一些推荐的 PHP 框架及其适用场景&#xff1a; 1. Laravel 特点&#xff1a;功能丰富&#xff0c;生态系统强大&#xff0c;内置 API 资源&#xff0c;支持 …

前端入门之CSS

CSS: HTML负责定义页面结构;JS负责处理页面逻辑和点击事件;CSS负责用于描述 HTML 元素的显示方式,通过 CSS 可以控制颜色、字体、布局等。 核心语法: 选择器: 类选择器主要用于选中需要添加样式的 HTML 元素。主要分为:类选择器(.class-name { ... })、标签选择器(…