结构体大揭秘:代码中的时尚之选(上)

目录

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

结构

结构是一些值的集合,这些值被称为成员变量。之前说过数组是相同类型元素的集合。结构的每个成员可以是不同类型的变量,当然也可以是相同类型的。

我们在生活中会用姓名、性别、年龄、身份证号来描述人,用书名、作者、出版社、书号等等来描述书。像这些复杂的对象就需要用结构体来描述。

结构的声明

struct 名称
{
	成员列表(一个或者多个);
}变量列表;

比如我们用结构体来描述一个学生,假设需要用到姓名,性别和年龄。

#include<stdio.h>

struct Stu
{
	//成员变量,描述结构体对象的相关属性
	char name[20];
	char sex[5];
	int age;
};

int main()
{
	//int a;
	struct Stu a; //struct Stu是类型
	
	return 0;
}

在这里插入图片描述

struct Stu
{
	//成员变量,描述结构体对象的相关属性
	char name[20];
	char sex[5];
	int age;
}a,b,c; //这里的a,b,c是结构体变量,属于全局变量
typedef struct Stu
{
	//成员变量,描述结构体对象的相关属性
	char name[20];
	char sex[5];
	int age;
}Stu; //这里的Stu相当于把struct Stu重命名为Stu 

int main()
{
	//struct Stu a;
	Stu a; //struct Stu是类型。现在由Stu替代。没有typedef,struct不能省略。
	return 0;
}

结构成员的类型

结构成员可以是标量、数组、指针或者其他结构体。

struct A 
{
	int a; 
	char arr[10]; //数组
	int* p; //指针
};

struct B
{
	int b;
	struct A b; //其他结构体
};

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

//定义
//第一种方法
struct A
{
	int x;
	int y;
}a1; //定义a1

//第二种方法
struct A a2; //定义结构体变量a2
//初始化1
struct A a3 = {3,5};//定义变量的同时初始化。
//初始化2
struct A
{
	int x;
	int y;
}a4 = {3,5};

结构体成员的访问

通过点操作符访问

//1
#include<stdio.h>

struct A
{
	int x;
	int y;
}a4 = {3,5};

int main()
{
	printf("%d %d\n", a4.x, a4.y);
	return 0;
}
//2
#include<stdio.h>

struct Stu
{
	char name[10];
	char sex[5];
	int age;
};

int main()
{
	struct Stu a = { "小刘","男",19};
	printf("%s %s %d\n", a.name, a.sex, a.age);
	return 0;
}

有时候我们得到的不是结构体变量,而是一个指向结构体的指针

#include<stdio.h>
struct Stu
{
	char name[10];
	char sex[5];
	int age;
};

void Out(struct Stu* pa)
{
	printf("%s %s %d\n", (*pa).name, (*pa).sex, (*pa).age);
	printf("%s %s %d\n", pa->name, pa->sex, pa->age);//使用结构体指针访问指向对象的成员
}
int main()
{
	struct Stu a = { "小刘", "男", 19 };
	Out(&a);
	return 0;
}

结构体传参

#include<stdio.h>

struct A
{
	int arr[100];
	int num;
}a = { {1,2,3} , 5};

//结构体传参
void Out1(struct A a)
{
	printf("%d\n", a.num);
}

//结构体地址传参
void Out2(struct A* pa)
{
	printf("%d\n", pa->num);
}

int main()
{
	Out1(a); //方法1
	Out2(&a); //方法2

	return 0;
}

首选方法2
原因:函数传参的时候,参数是需要压栈的。如果传递的结构体对象的时候,结构体太大的话,参数压栈的系统开销会比较大,很浪费内存,会导致性能下降。
所以结构体传参的时候,要传结构体的地址

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

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

相关文章

【数据库原理】(38)数据仓库

数据仓库&#xff08;Data Warehouse, DW&#xff09;是为了满足企业决策分析需求而设计的数据环境&#xff0c;它与传统数据库有明显的不同。 一.数据库仓库概述 定义: 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持企业管理和…

DAY06_SpringBoot—入门properties/YML文件lombok插件及使用

目录 1 SpringBoot1.1 SpringBoot介绍1.2 SpringBoot入门案例1.2.1 安装SpringBoot插件1.2.2 创建SpringBoot项目 1.3 关于SpringBoot项目说明1.3.1 关于POM.xml文件说明1.3.2 依赖配置项1.3.3 build标签 1.4 SpringBoot Maven操作1.4.1 项目打包1.4.2 java命令运行项目 1.5 关…

数据脱敏(二)脱敏算法-哈希脱敏

脱敏算法篇使用阿里云数据脱敏算法为模板,使用算子平台快速搭建流程来展示数据 哈希脱敏是一种数据安全处理技术&#xff0c;主要用于保护敏感信息。它将原始数据&#xff08;如密码、身份证号等&#xff09;通过哈希算法转换成固定长度的哈希值&#xff0c;即使哈希值被泄露&a…

【GitHub项目推荐--老照片变清晰】【转载】

先来看一个效果图&#xff0c;这个开源项目能把模糊爆浆的老照片 1 s 内变成清晰、高清的有色照片。 而以上这些效果&#xff0c;无需专业 PS 技能&#xff0c;只用一个网页端的 Demo、点点鼠标上传图片就能搞定。 这个修复神器&#xff0c;由腾讯 PCG ARC 实验室研发&#xf…

Java 面向对象 06 对象内存图(黑马)

之前设计的如下图&#xff1a; 方法区和内存在物理上是一块的&#xff0c;但是有不好的地方&#xff0c;所以变成了这种形式&#xff1a; 一个对象的内存图&#xff1a; 在创建对象时虚拟机至少做了以下七步&#xff1a; 解释&#xff1a; 第一步&#xff1a; 第二步&#x…

使用golang对接微软Azure AI翻译

文章目录 一、官方地址二、准备工作三、代码示例 一、官方地址 https://learn.microsoft.com/zh-CN/azure/ai-services/translator/translator-text-apis?tabsgo 二、准备工作 创建服务 创建服务连接地址&#xff1a;https://portal.azure.com/#create/Microsoft.CognitiveS…

如何本地部署虚拟数字克隆人 SadTalker

环境&#xff1a; Win10 SadTalker 问题描述&#xff1a; 如何本地部署虚拟数字克隆人 SadTalker 解决方案&#xff1a; SadTalker&#xff1a;学习逼真的3D运动系数&#xff0c;用于风格化的音频驱动的单图像说话人脸动画 单张人像图像&#x1f64e; ♂️音频&#x1f3…

数据结构:顺序循环队列

队列是限制在两端操作进行插入操作与删除操作的线性表&#xff0c;允许进行插入操作的一端称为"队尾"&#xff0c;允许进行删除操作的一端称为“队头”。当线性表中没有元素时&#xff0c;称为“空队”。队列的特点是先进先出。 队列两种规定&#xff1a; 1、front…

算法第二十一天-丑数

丑数 题目要求 解题思路 首先判断数字是不是为0或者负数&#xff0c;两者均不可能成为丑数&#xff1b; 之后对n进行不断整除&#xff0c;直到无法除尽为止。 简单判断最后的数是不是1即可。 代码 class Solution:def isUgly(self, n: int) -> bool:if n<0:return Fa…

1.redhat网卡配置

想要通过cmd ping通redhat 1.在redhat输入:ifconfig 将自己主机网络适配器VMware Network Adapter VMnet1的IPv4配置在同一网段,掩码是255.255.255.0,所以最后一位不同就可以 推荐用FileZilla远程上传文件

【手撕C语言 第六集】函数(上)

文章目录 一、函数是什么&#xff1f;二、C语言中函数的分类&#xff1a;1.库函数1.1 如何学会使用库函数&#xff1f; 2. 自定义函数 三、函数的参数1.实际参数&#xff08;实参&#xff09;&#xff1a;2.形式参数&#xff08;形参&#xff09;&#xff1a; 四、函数的调用&a…

Java研学-spring框架(一)

一 概述 1 介绍 Spring框架是一个开源的Java EE应用程序框架&#xff0c;旨在简化Java企业级应用的开发难度和开发周期&#xff0c;主要通过控制反转&#xff08;IoC&#xff09;和面向切面编程&#xff08;AOP&#xff09;等技术实现。   容器&#xff08;Container&#x…

会计六要素

目录 会计六要素(一&#xff09;资产(二&#xff09;负债(三&#xff09;所有者权益(四&#xff09;收入、费用和利润一、收入二、费用三、利润 \quad 会计六要素 我国《企业会计准则》将企业会计要素分为 资产 负债 所有者权益 收入 费用 利润 \quad (一&#xff09;资产 定…

代码随想录二刷 |回溯 | 组合

代码随想录二刷 &#xff5c;回溯 &#xff5c; 组合 题目描述解题思路代码实现 题目描述 77.组合 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 解题思路 递归…

软考高项重点总结!看这一篇就够了❗️

&#x1f4da;信息系统项目管理师第四版g方教材有700多页&#xff0c;很多考生在翻书的时候总觉得书上内容太多&#xff0c;知识点也记不住&#xff0c;不知道哪些是重点。 &#x1f618;那今天我们来梳理一下。 &#x1f50d;这本书是有24章&#xff0c;但也不是都要精通的&am…

智慧文旅一机游:科技与文化的完美结合,引领智慧文旅新潮流,智慧旅游未来已来

一、科技与文化的完美结合&#xff1a;智慧文旅一机游的核心理念 智慧文旅一机游&#xff0c;是科技与文化相融合的产物&#xff0c;它不仅代表着旅游行业的创新与发展&#xff0c;更是一种文化与科技完美结合的生活方式。一机游的核心理念在于通过先进的科技手段&#xff0c;提…

java使用jsch处理软链接判断是否文件夹

前言 这一次主要是碰到一个问题。因为使用jsch去读取文件的时候&#xff0c;有一些文件它是使用软链接制作的一个映射。因为这里面有一个问题。如果它是软链接你就无法判断他到底是文件。还是文件夹&#xff1f;因为他没有提供可以直接读取的方法&#xff0c;用权限信息去判断…

08. Springboot集成webmagic实现网页爬虫

目录 1、前言 2、WebMagic 3、Springboot集成Webmagic 3.1、创建Springboot&#xff0c;并引入webmagic依赖 3.2、定义PageProcessor 3.3、元素选择 3.3.1、F12查看网页元素 3.3.2、元素选择 3.3.3、注意事项 4、小结 1、前言 在信息化的时代&#xff0c;网络爬虫已…

二叉树简单OJ题(及其后续函数补充)

OJ题 单值二叉树 首先呢&#xff0c;我们还是把问题分化一下&#xff0c;求一棵二叉树是否为单值二叉树&#xff0c;还是可以分为几个部分&#xff1a;根节点 左子树 右子树 而我们向下遍历的时候&#xff0c;其实就是在这个节点以及其左子树和右子树中找&#xff0c;是否值都…

本地git切换地区后,无法使用ssh访问github 22端口解决方案

问题 由于放假回家&#xff0c;发现之前一直使用正常的git&#xff0c;与github无法通讯&#xff0c;pull和push都无法连接。报错如下&#xff1a; connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository. 原因 可能是所…