C语言_结构体初阶(还未写完)

结构体的声明

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

数组:一组相同类型元素的集合
结构体:一组不一定相同类型元素的集

2. 结构的声明

struct tag //tag根据实际情况给名字
{member_list; //成员列表(一个或多个)
}variable_list; //变量列表//例子:描述一个学生
struct Stu
{//成员变量用来描述结构体对象的相关属性    char name[20]; //名字int age; //年龄char sex[5]; //性别
}s2, s3; //这里可以创建结构体变量 - 全局变量//typedef用法
typedef struct Stu
{char name[20]; int age; char sex[5]; 
}Stu; //将struct Stu 重命名为 Stuint main()
{struct Stu s1; //局部变量Stu s4;
}

3. 结构成员的类型

//结构的成员可以是标量、数组、指针,甚至是其他结构体。 
struct S
{int a;char arr[5];int* p;
};struct A
{struct S s;double d;
};

4. 结构体变量初始化

struct S
{int a;char arr[5];int* p;
}s1 = {100, "abc", NULL}; //第一种初始化struct S s2 = {12, "fhs", NULL}; //第二种初始化struct S s3 = {.arr="asd", .p=NULL, .a=1}; //第三种自己找到成员然后初始化
printf("%d %s %p\n", s3.a, s3.arr, s3.p); //. 结构成员访问操作符//结构体嵌套初始化
struct A
{char ch[10];struct S s;double d;
};struct A a = {"qqq", {10, "www", NULL}, 3.14};
printf("%s %d %s %p %lf\n", a.ch, a.s.a, a.s.arr, a.s.p, a.d);

结构体成员的访问

//1. 结构体变量访问成员
printf("%d %s %p\n", s3.a, s3.arr, s3.p); //. 结构成员访问操作符
printf("%s %d %s %p %lf\n", a.ch, a.s.a, a.s.arr, a.s.p, a.d);//2. 结构体指针访问指向变量的成员
struct Stu
{char name[20];int age;
};void print(struct Stu* ps)
{printf("name = %s   age = %d\n", (*ps).name, (*ps).age);//使用结构体指针访问指向对象的成员printf("name = %s   age = %d\n", ps->name, ps->age);
}int main()
{struct Stu s = {"zhangsan", 20};print(&s);//结构体地址传参return 0;
}

结构体传参

下面的 print1 和 print2 函数哪个好些?答案是:首选print2函数。

struct S
{int data[1000];int num;
};struct S s = {{1,2,3,4}, 1000};//结构体传参
void print1(struct S s)
{printf("%d\n", s.num);
}//结构体地址传参
void print2(struct S* ps)
{printf("%d\n", ps->num);
}int main()
{print1(s);  //传结构体print2(&s); //传地址return 0;
}

原因:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的 下降。

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

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

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

相关文章

Spring注解@Qualifier

Autowired 注解是 Spring 依赖注入。但是有些场景下仅仅靠这个注解不足以让Spring知道到底要注入哪个 bean。 默认情况下,Autowired 按类型装配 Spring Bean。 如果容器中有多个相同类型的 bean,则框架将抛出 NoUniqueBeanDefinitionException&#xff0…

数字化产科管理平台全套源码,java产科电子病历系统源码

数字化产科管理平台全套成品源码,产科电子病历系统源码,多家大型妇幼专科医院应用案例。源码完全授权交付。 数字化产科管理平台(智慧产科系统)是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天以内的一…

数据库MySQL学习笔记

数据库MySQL学习笔记 主要记录常见的MySQL语句学习过程,增删改查。 -- 显示所有数据库 SHOW DATABASES;-- 创建新数据库 CREATE DATABASE mydatabase;-- 使用数据库 USE mydatabase;-- 显示当前数据库中的所有表 SHOW TABLES;-- 创建新表 CREATE TABLE users (id …

BERT--学习

一、Transformer Transformer,是由编码块和解码块两部分组成,其中编码块由多个编码器组成,解码块同样也是由多个解码块组成。 编码器:自注意力 全连接 多头自注意力:Q、K、V 公式: 解码块&#xff1…

【Hive实战】 HiveMetaStore的指标分析

HiveMetaStore的指标分析(一) 文章目录 HiveMetaStore的指标分析(一)背景目标部署架构 hive-site.xml相关配置元数据服务的指标相关配置 源码部分(hive2.3系)JvmPauseMonitor.javaHiveMetaStore的内部类HMS…

【anaconda】—“conda info“命令后conda配置和环境信息的理解

文章目录 conda配置和环境信息的理解 conda配置和环境信息的理解 安装anaconda成功后,打开cmd,输入"conda info"命令,结果显示如下: conda的配置和环境信息的输出。以下是对每个字段的解释: active environm…

H2 Database Console未授权访问漏洞封堵

背景 H2 Database Console未授权访问,默认情况下自动创建不存在的数据库,从而导致未授权访问。各种未授权访问的教程,但是它怎么封堵呢? -ifExists 很简单,启动参数添加 -ifExists ,它的含义&#xff1a…

中电金信:加快企业 AI 平台升级,构建金融智能业务新引擎

在当今数字化时代的浪潮下,人工智能(AI)技术的蓬勃发展正为各行业带来前所未有的变革与创新契机。尤其是在金融领域,AI 模型的广泛应用已然成为提升竞争力、优化业务流程以及实现智能化转型的关键驱动力。然而,企业在积…

【C++ 】解决 C++ 语言报错:Null Pointer Dereferenc

文章目录 引言 在 C 编程中,空指针解引用(Null Pointer Dereference)是一种常见且危险的错误。当程序试图通过空指针访问内存时,会导致程序崩溃或产生不可预期的行为。本文将详细探讨空指针解引用的成因、检测方法及其预防和解决…

微信新宠!淘宝扭蛋机小程序,让购物更添乐趣

在移动互联网飞速发展的今天,微信小程序以其便捷性、即用即走的特点,迅速成为了用户日常生活中不可或缺的一部分。而在众多小程序中,一款名为“淘宝扭蛋机”的新晋“网红”,正以其独特的玩法和丰富的惊喜,为购物体验增…

【Hive实战】HiveMetaStore的指标采集告警

HiveMetaStore的指标采集告警 文章目录 HiveMetaStore的指标采集告警背景部署概要图 开启HiveMetaStore的JMX指标采集(Hadoop2指标系统)指标监控查询指标核心指标选择告警 遗留问题 背景 在远程模式的Metastore下,对其开启Hadoop2指标采集以…

简单配置VScode轻量级C++竞赛环境

1. 安装拓展 Chinese是中文,需要重启才可以运行,C/C拓展只是进行语法代码提示,不需要进行任何配置修改,默认即可。 2. 创建文件 如上图创建好各级文件夹,其中C是工作文件夹,.vscode是配置文件夹&#xff0…

【网络安全】Host碰撞漏洞原理+工具+脚本

文章目录 漏洞原理虚拟主机配置Host头部字段Host碰撞漏洞漏洞场景工具漏洞原理 Host 碰撞漏洞,也称为主机名冲突漏洞,是一种网络攻击手段。常见危害有:绕过访问控制,通过公网访问一些未经授权的资源等。 虚拟主机配置 在Web服务器(如Nginx或Apache)上,多个网站可以共…

学习测试2-方法

设计测试用例 设计测试用例的万能公式 (在没有需求文档的情况下) 软件质量模型 效率就是性能 兼容性测试 浏览器 谷歌 IE 火狐 苹果 百度 Windows7 10 11 苹果系统 app 不同品牌 小米 vivo 华为 苹果 不同的操作系统 安卓 鸿蒙 苹果 -----------------------…

TikTok马来西亚直播网络怎么配置?

TikTok是一款全球流行的社交媒体应用,在东南亚地区拥有大量用户。在马来西亚这个多元化的国家,配置高效稳定的直播网络对TikTok的运营至关重要。 配置马来西亚直播网络的必要性 广泛的地理覆盖:马来西亚包括大片陆地和众多岛屿,网…

OpenSSH远程代码执行漏洞(CVE-2024-6387)

OpenSSH远程代码执行漏洞(CVE-2024-6387) 漏洞简介及影响范围 OpenSSH 远程代码执行漏洞(CVE-2024-6387)是影响 OpenSSH 服务器的一个高危安全漏洞,允许未经身份验证的远程攻击者在受影响的 Linux 系统上以 root 身份执行任意代码。这个严重…

性能压测 -优化 Nginx的动静分离

两件事情 1.以后将所有的项目的静态资源都应该放在nginx里面 2.nginx 规则:/static/***所有请求都有nginx直接返回 nginx 配置一下配置文件,然后把html 的静态资源,绑定好是Nginx优先级高的静态资源路径,就去交给nginx静态资源…

使用openssl生成公私钥并进行RSA加密

生成私钥 openssl genrsa -out private.pem 1024通过私钥生成公钥 openssl rsa -in private.pem -pubout -out public.pem通过公钥加密数据 openssl pkeyutl -encrypt -in data.txt -inkey public.pem -pubin -out encData.txtdata.txt :为我们要加密的数据enc…

skimage.io与matplotlib.image.imread读取图片的区别

以前没用过matplotlib的读图方式,今天在别人的工程里看到这个用法,自己改写别人工程时,怎么都找不到问题,最后在最初,开始读图的时候发现了问题。 目录 🌷🌷1.对于png格式的3波段uint8图像 &a…

Prometheus + Grafana 监控系统搭建使用指南-Nacos 接入 Prometheus 监控

Nacos 接入 Prometheus 监控 系列文章目录 Prometheus 的安装部署Grafana的安装部署Linux服务器接入Prometheus监控-Node Exporter 安装指南Prometheus 接入SpringBoot微服务监控Mysql 接入 Prometheus RocketMQ 接入Prometheus 监控ElasticSearch 接入 PrometheusNacos 接入…