结构体的基础概念以及实现

本文详细介绍了C语言中结构体的声明、变量创建与初始化、结构体自引用的注意事项、内存对齐规则以及结构体在函数参数传递中的效率优化,还探讨了结构体实现位段的概念和使用方法。
摘要由CSDN通过智能技术生成

1. 结构体类型的声明

所谓的结构体,就是在我们不知道如何去形容一件事物的时候,自己所创造的类型

这里我们用来描述一个学生

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

当然,结构体的类型是根据你想的来定的

2. 结构体变量的创建和初始化

int main()
{
	struct Stu s2 = { .age = 18, .name = "lisi", .id = "20230818002", .sex = "⼥
	printf("name: %s\n", s2.name);
	printf("age : %d\n", s2.age);
	printf("sex : %s\n", s2.sex);
	printf("id : %s\n", s2.id);
	return 0;
}

这里我们是可以对他进行一个初始化的,初始化的话就是  .   加这个结构体它的名称就可以进行初始化

3.结构体的自引用

struct Node
{
int data;
struct Node next;
};

注意,这个写法是错误的

所谓的结构体自引用并不是像递归一样在里面所衔接,不然的话它的大小会是无穷的大,很不合理,那我们就是自引用的时候,引用的是它的这个指针。

解决⽅案如下:定义结构体不要使⽤匿名结构体了

4. 结构体内存对⻬

所谓的结构体内存对齐,就是只在我们往电脑中存储的时候,但位置必须得要有以下几个条件

每个编译器都会有他独自的这个对齐的大小,我们的每一个类型与它的大小所对比,那么我们往里储存的时候,必须得要在在它位置的整数倍,比如说int类型,它就必须得4的整数倍才能存储,如果是short类型的话,它只能在2的整数倍,我们中间的空间就直接舍弃,这样的话可以加快它的运行速度

但当我们在存储最后的时候,我们所算出来的必须得要是它最大对齐的整数倍,但是它这个最大对齐数是它类型中的最大的字节数与他所规定的最大的最小值,比如说在VS中,它的这个对齐数是8,但是我们的最大的是int类型,那int类型跟8比,那肯定就是int小,就是取小的就是4,所以说即便是最后只存存到了13的位置,但是我们必须得要取它的整数倍,就是16

5. 结构体传参

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);
}

就以上代码而言的话,有print1和print2,但是print1的话,很明显是不如print2更加的有效率

由此可见,我们在传参的时候传他的地址

6. 结构体实现位段

也许你没有听说过位段,但是你一定听说过段位。他这个位段呢,主要是用来人工来分配他的地址

以上就是位段的使用方式,如果说超出了或者未超出,就直接舍弃

struct S
{
 char a:3;
 char b:4;
 char c:5;
 char d:4;
};

就是相当于只给他3个比特位,4个比特位,5个比特位和4个比特位

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值