首页 > 其他分享 >自定义类型:结构体

自定义类型:结构体

时间:2024-09-17 22:19:35浏览次数:12  
标签:struct 自定义 int s1 char printf 类型 结构

文章目录

1.了解结构体

用结构体去叙述一个人的基本信息

struct ren
{    
	char gender[3];//性别
	char name[15];//名字
	int age;//年龄
	float weight;//单位kg
};
int main()
{
	struct ren s1 = { "男","张三",18,61.5};
	struct ren s2 = { "女","刘文净",16,52.0 };
	printf("性别:%s\n", s1.gender);
	printf("名字:%s\n", s1.name);
	printf("年龄:%d\n", s1.age);
	printf("体重:%.1f\n", s1.weight);
	printf("性别:%s\n", s2.gender);
	printf("名字:%s\n", s2.name);
	printf("年龄:%d\n", s2.age);
	printf("体重:%.1f\n", s2.weight);
	return 0;
}

在这里插入图片描述

2.结构的自引用

在结构中包含⼀个类型为该结构本⾝的成员是否可以呢?
⽐如,定义⼀个链表的节点:

struct Node
{
	int a;
	struct Node next;
};
int main()
{
	printf("%d", sizeof(struct Node));
	return 0;
}

在这里插入图片描述
正确的自引用方式:

struct Node
{
	int a;
	struct Node *next;
};

3.对齐规则

⾸先得掌握结构体的对⻬规则:
1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处
2.其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。
对⻬数=编译器默认的⼀个对⻬数与该成员变量⼤⼩的较小值。
VS 中默认的值为 8
Linux中gcc没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩
3.结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的整数倍。
4.如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。

struct s1 
{
	char c1;//1
	char c2;//1
	int n;//4
};
struct s2
{
	char c1;//1
	int n;//4
	char c2;//1
};
int main()
{
	printf("%zd\n", sizeof(struct s1));
	printf("%zd\n", sizeof(struct s2));

	return 0;
}

在这里插入图片描述
在这里插入图片描述

4.修改默认对齐数

#pragma pack(1)
struct s
{
	char c1;
	int n;
	char c2;
};
int main()
{
	printf("%zd\n", sizeof(struct s ));
	return 0;
}

在这里插入图片描述

5.结构体传参

struct s 
{
	int a[10];
	int b;
};
struct s s1 = { {1,2},25 };
void printf1(struct s s1)
{
	printf("%d\n", s1.b);
}
void printf2(struct s* p)
{
	printf("%d\n", p->b);
}
int main()
{
	printf1(s1);
	printf2(&s1);
	return 0;
}

结构体传参的时候,尽量传结构体的地址。
函数传参的时候,参数是需要压栈,会有时间和空间上的系统开销。如果传递⼀个结构体对象的时候,结构体过⼤,参数压栈的的系统开销⽐较⼤,所以会导致性能的下降。

6. 结构体实现位段

位段的内存分配:

  1. 位段的成员可以是 int unsigned int signed int 或者是 char 等类型2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的⽅式来开辟的。3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使⽤位段。
    在这里插入图片描述
    在这里插入图片描述
    当剩余下bit位不够时开新的单位空间(列如:int 是32个bit位,char是8个bit位)
    在这里插入图片描述

标签:struct,自定义,int,s1,char,printf,类型,结构
From: https://blog.csdn.net/2401_85487314/article/details/142308196

相关文章

  • 能否判断自定义变量是否为空?
    不同的编程语言有不同的方式来判断一个变量是否为空。下面列出了一些常见编程语言中判断变量是否为空的方法:1.Java在Java中,你可以使用多种方法来判断一个变量是否为空:对于对象:检查是否为 null。java if(object==null){System.out.println("变量为空");}对......
  • 数据结构(二叉树)练习题————考前必备合集
    今天在力扣和牛客网上找了一下题,下面附上题目链接,大家先做题再看答案1.检查两颗树是否相同。100.相同的树-力扣(LeetCode)2.另一颗树的子树。572.另一棵树的子树-力扣(LeetCode)3.翻转二叉树。226.翻转二叉树-力扣(LeetCode)4.判断一颗二叉树是否是平衡二叉树。110.......
  • Linux基础3-基础工具4(git,冯诺依曼计算机体系结构)
    上篇文章:Linux基础3-基础工具3(make,makefile,gdb详解)-CSDN博客本章重点:1.git简易使用2.冯诺依曼计算机体系结构介绍一.git使用 1.1什么是git?    git是用于管理代码版本的一种工具,我们在如GitHub,Gitee中创立自己的仓库后。        我们在本地使......
  • eyoucms易优无法安装,提示当前数据库结构与官方不一致
    当你在安装易优CMS(EyouCMS)时遇到“当前数据库结构与官方不一致”的提示,这通常意味着你的数据库版本或结构与CMS所需的版本或结构不符。这种情况通常是由于以下几个原因造成的:数据库版本过低:数据库版本低于CMS所支持的最低版本。数据库文件版本不匹配:数据库文件版本与CMS源码版......
  • 算法与数据结构——哈希优化策略与算法选择
    哈希优化策略在算法题中,我们通常通过线性查找替换为哈希查找来降低算法的时间复杂度。我们借助一个算法题来加深理解。Question给定一个整数数组nums和一个目标元素target,请在数组中搜索“和”为target的两个元素,并返回他们的数组索引。返回任意一个即可。线性查找:以时间换......
  • 帝国ECMS怎么去掉“选择注册会员类型”
    要去掉帝国ECMS(EmpireCMS)系统中的“选择注册会员类型”页面,可以根据不同的版本采取不同的方法。以下是适用于不同版本的解决方案:对于帝国CMS6.6版本:连接到服务器上的网站目录,找到 e/class/user.php 文件。下载该文件到本地,并用文本编辑器打开。在文件中找到 $changeregi......
  • Sa-Token的v1.39.0自定义鉴权注解怎么玩
    个人博客:无奈何杨(wnhyang)个人语雀:wnhyang共享语雀:在线知识共享Github:wnhyang-Overview简介在Sa-Token最新的v1.39.0版本的更新日志中有这么一句话核心:升级:重构注解鉴权底层,支持自定义鉴权注解了。[重要]正巧最近有看一个关于鉴权的东西,顺便看一下吧!常见的自定义注解鉴权目标:对于......
  • D10【python接口自动化学习】-python基础之内置数据类型
    day10列表学习日期:20240917学习目标:内置数据类型--列表:如何处理同类数据?学习笔记:列表的定义创建列表#创建列表colours=['red','blue','green']print(colours)#将列表打印出来['red','blue','green']print(type(colours))#<class&#......
  • Windows的树形目录结构
    一、文件、文件夹(目录)、逻辑盘、路径的概念·文件:是操作系统用来存储和管理信息的基本单位·文件夹也叫目录:是文件的集合体,文件夹中可包含多个文件,也可包含多个子文件夹。每个文件夹都有一个唯一的名称,用于在文件系统中标识和访问。·逻辑盘,计算机的外存储器一般都是硬盘,为......
  • 【数据结构与算法 | 灵神题单 | 自底向上DFS篇】力扣965, 2331, 100, 1379
    1.力扣965:单值二叉树1.1题目:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例2:输入:[2,2,2,5,2]输出:false提示:给定树的节点数范围是 [1,......