我能“C”——初阶结构体

news2024/10/5 13:33:19

目录

结构体

1.结构体的声明

1.1结构体的基础知识

1.2结构体的声明

1.3结构成员的类型

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

2. 结构体成员的访问

3.结构体传参 

THE END


结构体

  • 结构体类型的声明
  • 结构体初始化
  • 结构体成员访问
  • 结构体传参

1.结构体的声明

1.1结构体的基础知识

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

1.2结构体的声明

struct tag
{
member - list ;
} variable - list ;
//例如描述一个学生
typedef struct Stu
{
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}Stu;//分号不能丢

 

 用关键字创建typedef

1.3结构成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体

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

有了结构体类型,那如何定义变量,其实很简单

struct Point
{
 int x;
 int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2
//初始化:定义变量的同时赋初值。
struct Point p3 = {x, y};
struct Stu        //类型声明
{
 char name[15];//名字
 int age;      //年龄
};
struct Stu s = {"zhangsan", 20};//初始化
struct Node
{
 int data;
 struct Point p;
 struct Node* next; 
}n1 = {10, {4,5}, NULL}; //结构体嵌套初始化
struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化

2. 结构体成员的访问

1.结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。

2.结构体指针访问指向变量的成员有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。结构体指针->结构体成员

#include <stdio.h>
struct Book
{
	char name[20];
	int price;
};
void print(struct Book* p)
{
	printf("%s %d\n", p->name, p->price);
}

int main()
{
	struct Book b1 = {"C语言", 66};
	struct Book b2 = { .price = 80, .name = "数据结构"};//初始化成员变量可以不按照声明的顺序
	//结构体变量.结构体成员
	printf("%s %d\n", b1.name, b1.price);
	printf("%s %d\n", b2.name, b2.price);
	//结构体指针->结构体成员
	struct Book* p1 = &b1;
	print(&b1);
	return 0;
}

3.结构体传参 

结构体传参是怎么传的呢?其实也有两种传法,一是传值调用,二是传址调用。

#include <stdio.h>
struct S
{
	int arr[100];
	int n;
};
void print1(struct S ss)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", ss.arr[i]);
	}
	printf("\n%d\n", ss.n);
}

void print2(struct S* ps)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", ps->arr[i]);
	}
	printf("\n%d\n", ps->n);
}

int main()
{
	struct S s = { {1,2,3,4,5}, 100 };
	print1(s);
	print2(&s);

	return 0;

因为函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降因此,选择传址调用方法才是最优的选择。

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

THE END

        这是今日份关于结构体的一些分享,希望可以帮助到大家!如果有什么不足的地方也请家人们给小叶一些好的建议,我会不断优化文章的!那就让我们一起加油吧!哈哈哈哈哈

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

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

相关文章

单板硬件设计:存储器SD卡( NAND FLASH)

在单板设计中&#xff0c;无论是涉及到一个简易的CPU、MCU小系统或者是复杂的单板设计&#xff0c;都离不开存储器设计&#xff1a; 1、存储器介绍 存储器的分类大致可以划分如下&#xff1a; ROM和RAM指的都是半导体存储器&#xff0c;ROM在系统停止供电的时候仍然可以保持数…

防火墙可以“阻挡”黑客的进攻吗?

"防火墙"这个词大家应该都听说过或者应用过&#xff0c;每个人的电脑、手机几乎都会安装一些的主流的防火墙软件&#xff0c;工作的企事业单位网络里都会安装硬件防火墙。那么这些防火墙能阻挡住黑客的攻击吗&#xff1f; 一、首先我们需要知道防火墙的原理或者说主…

vue项目启动出现可选链?:操作符解析失败

问题描述&#xff1a;vue项目中引入了其他npm包&#xff0c;包中使用可选链操作符?:&#xff0c;本地npm run serve启动时&#xff0c;之前都正常&#xff0c;这次报错了&#xff0c;无法启动。 解决步骤&#xff08;2步&#xff09;&#xff1a; 1. 安装&#xff1a;&#…

【算法思维】-- KMP算法

OJ须知&#xff1a; 一般而言&#xff0c;OJ在1s内能接受的算法时间复杂度&#xff1a;10e8 ~ 10e9之间&#xff08;中值5*10e8&#xff09;。在竞赛中&#xff0c;一般认为计算机1秒能执行 5*10e8 次计算。 时间复杂度取值范围o(log2n)大的离谱O(n)10e8O(nlog(n))10e6O(nsqrt(…

某神QQ机器人BOT搭建教程win系统

某神QQ机器人BOT搭建教程win系统 大家好我是艾西&#xff0c;今天跟大家分享的是某神qi鹅群机器人bot搭建方式以及详细的操作步骤。跟上艾西的节奏准备发车啦&#xff01; 前言&#xff1a;&#xff08;xxxx即为https&#xff09;&#xff08;zzz即为com&#xff09; qi鹅群…

geoserver发布矢量切片服务理论与实战

geoserver发布矢量数据服务前几篇文章已经分享过了&#xff0c;但是在实际业务中&#xff0c;矢量数据shp文件有时候比较大&#xff0c;包含上百万完个点&#xff0c;发布完整的服务后&#xff0c;有时候&#xff0c;前端显示还是有点慢&#xff0c;毕竟是一次加载完成&#xf…

Verilog语法概述二:何为仿真?仿真可以在几个层面上进行?

Verilog 是一种用于数字逻辑电路设计的硬件描述语言&#xff0c;可以用来进行数字电路的仿真验证、时序分析、逻辑综合。 既是一种行为级&#xff08;可用于电路的功能描述&#xff09;描述语言又是一种结构性&#xff08;可用于元器件及其之间的连接&#xff09;描述语言。 …

day34_js

今日内容 零、 复习昨日 一、JS 零、 复习昨日 一、引言 1.1 JavaScript简介 JavaScript一种解释性脚本语言&#xff0c;是一种动态类型、弱类型、基于原型继承的语言&#xff0c;内置支持类型。它的解释器被称为JavaScript引擎&#xff0c;作为浏览器的一部分&#xff0c;广泛…

数据分类分级 数据识别-excel分类分级模版文件导入、解析

前面讲了数据分类分级 数据识别-实现部分敏感数据识别,本次针对模版导入展开,excel导入采用的是easyexcel 目录 easyexcel介绍easyexcel实战添加依赖读取数据监听器的实现数据读取方法读取结果上面图片是AI创作生成!如需咒语可私戳哦! easyexcel介绍 之前的excel导入解析…

全网最可”铐“最可“刑”的fiddler抓包教程

Fiddler 下载&#xff1a; https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe 浏览器f12 选择“网络”&#xff0c;点选“保留日志” Fiddler 浏览器执行“去缓存刷新”&#xff1a;shiftf5 会话 即是 包 har文件在测试当中有什么作用?&#xff1a;h…

存储卡格式化后如何找回数据?一招轻松恢复数据

存储卡内存不足、存储卡中毒、存储卡损坏这几种情况都会导致我们把存储卡格式化操作&#xff0c;存储卡格式化后所有数据都会清空&#xff0c;这是众所皆知的&#xff0c;存储卡不小心格式化了怎么办&#xff1f; 其实是有方法恢复格式化的数据&#xff0c;我们可以通过专业的数…

香橙派4和树莓派4B构建K8S集群实践之五:端口公开访问配置

1. 应用场景说明 - 我们需用k8s集群提供开放特别的端口访问服务&#xff0c;如一些微服务端口 - 在团队开发环境中&#xff0c;通常要访问公共数据库&#xff0c;集群需提供统一的接口给大伙 接下来以实践四中设置的mariadb-galera为基础&#xff0c;公开端口3306&#xff0…

银豆信息张雪灿:钻石级合作伙伴的增长秘诀

编者按&#xff1a; 杭州银豆信息技术有限公司&#xff08;简称“银豆”&#xff09;&#xff0c;是一家专注于云计算服务的高科技企业&#xff0c;目前已为2000家企业级客户提供了专业的行业解决方案, 与人民网、光大银行、长安汽车金融、vivo金融、浙江省农科院、淄博市大数…

django部署在Centos7+python3+apache上教程

django在本地环境非常好配置使用自带的web服务就可以了但是部署到服务器上再使用自带的web就不方便了 一般是配合nginx或apache来使用。 这篇文章主要是教如何搭配apache的 1.升级sqlite3&#xff08;高版本django高版本不支持低版本sqlite3&#xff09; #一定要在安装python…

[ACTF新生赛2020]easyre 题解

1.查壳 32位文件&#xff0c;加了UPX壳 2.手动脱壳 使用Ollydbg UPX是一个压缩壳&#xff0c;运行了UPX将我们要运行的已经压缩的程序解压&#xff0c;才是真正的程序入口点OEP 我们需要将跟着汇编代码&#xff0c;找到程序真正的入口点 使用ESP定律可以快速定位 按下F7&…

Git设置代理

有时会国内会因为github克隆速度非常慢&#xff0c;中途各种错误断开造成克隆项目失败&#xff0c;可以尝试设置代理解决。 1、http、https协议 //设置全局代理 //http git config --global https.proxy http://127.0.0.1:1080 //https git config --global https.proxy http…

图神经网络:(节点分类)在KarateClub数据集上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 文献阅读&#xff1a;代码实操&#xff1a; 文献阅读&#xff1a; 参考文…

一个由“API未授权漏洞”引发的百万级敏感数据泄露

2023年4月的某一天&#xff0c;腾讯安全专家Leo正在为某家医院的重保防护做第一轮的安全风险排查。 医院的专用APP是外部网络访问最高的&#xff0c;也就是最大的风险敞口&#xff0c;需要重点排查。 Leo下载APP进行测试后&#xff0c;发现该医院存在一个严重的问题&#xff…

图像复原与重建MATLAB实验

文章目录 一、实验目的二、实验内容1. 噪声图像及其直方图。2. 空间噪声滤波器。3. 逆滤波。 一、实验目的 了解一些常用随机噪声的生成方法。掌握根据指定退化函数对图像进行退化的方法。掌握当模糊图像只存在噪声时的几种滤波复原方法。掌握当模糊图像同时存在线性退化和噪声…