C语言结构体的理解

本文介绍了C语言中如何使用结构体来组合不同类型的数据,包括结构体的定义、创建方式、访问方式,以及结构体的大小计算、对齐规则和位段优化。作者通过实例演示了结构体在内存中的布局和控制对齐数的方法。
摘要由CSDN通过智能技术生成

  在c语言天气的温度可以用double类型的变量来表示,表述人的名字可以用String的数据类型接收,但是如果我们要表示一个学生的话他有年龄名字等数据类型,那么我们无法用基本数据类型来表示了,所有就有了结构体这个数据类型。结构体就相当于一堆不同数据类型的集合,假如我们要表示一个学生的结构体的语法表示为 

​
struct stu{
char[10] name;
int age;
};

​

  结构体的变量的创建有两种方式一是定义结构体的时候创建二是在像基本数据类型那样创建

​
​
struct stu{
char[10] name;
int age;
}stu1;
struct stu stu2;


​

​

  定义结构体是里面的类型没有限制也可以放结构体类型的变量也可以放指针

struct stu{
int age;
char[10] name;
struct chengji cj;
struct chengji *cj;};

  结构体有两种访问形式意识通过创建变量.成员的方式访问这类似面向对象编程的对象访问成员还有就是通过结构体指针*cj->成员来访问。

  结构体也可以不完全声明,就是省略结构体标签,但是改用法只能用一次因为声明了两个编译器就无法区分了。

truct { 
int a; char b; float c; 
}a[20], *p;

  每个数据类型都有大小,结构体当然也不例外,结构体的大小并不是结构体成员简单相加而是遵循对齐规则⾸先得掌握结构体的对⻬规则:1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处2.其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。3.结构体总⼤⼩为最⼤对⻬数结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的 整数倍。4.如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构 体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。

  比如我们看着一段代码

#include<stdio.h>
struct s1
{
	int a;
	char b;
	float c;
}x;
int main() {
	printf("%d",sizeof(x));
	return 0;
}

从偏移量0开始a占四个字节然后跟这b因为b的字节是1所以是任何数的倍数此时偏移量编程4c的字节是4所以下次偏移量为4的倍数便是8;最后结构体的大小是4的倍数为12;

我们也可以修改对齐数通过#pragma

#include <stdio.h>
#pragma pack(1)//设置默认对⻬数为1 
struct S
{
 char c1;
 int i;
 char c2;
};
#pragma pack()//取消设置的对⻬数,还原为默认 
int main()
{
 printf("%d\n", sizeof(struct S));
 return 0;
}

结构体可以通过位段来节省空间

struct A
{
 int _a:2;
 int _b:5;
 int _c:10;
 int _d:30;
};

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值