结构体与共用体(联合体)
Posted 行稳方能走远
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体与共用体(联合体)相关的知识,希望对你有一定的参考价值。
结构体
什么是结构体?
用来存储不同类型的(数组存储的是同种类型数据)数据
定义结构体
struct 结构体名字{
需要存储的类型或者数组
};
例:
struct student
{
char name[20];
int id;
};
实际中,保存的数据一般不会是同一种类型。而结构体的大小也不是成员类型大小的简单相加。需要考虑到系统在存储结构体变量时的地址对齐问题。
由于存储变量地址对齐的问题,结构体大小计算必须满足两条原则:
一、结构体成员的偏移量必须是成员大小的整数倍
二、结构体大小必须是所有成员大小的整数倍
具体计算方法参照这篇博文:结构体对齐计算方式
定义结构体变量:
struct student stu1;这样就是定义一个结构体类型的变量,这样就能够使用这个结构体变量来存东西,其实就是给结构体里面的变量赋值,使用方式:stu1.id=12;直接‘ . ’出成员赋值即可。
定义结构体数组: struct student stu[10];这样就是定义一个结构体数组,这样就能狗使用这个结构体数组来存10个信息,使用方式:stu[0].id=12;跟上面一个直接 ’ . ’ 出成员赋值及即可。stu[0]就是表示第一个结构体变量
匿名结构体:
struct
{
int id;
char b;
}p;
这样想当然定义了结构体变量,变量名是p,要写就变量就在后面接几个变量名
实现给结构体取别名
typedef struct{
}Str;
Str s; //可以直接定义结构体变量
结构体嵌套
struct Node{
int a;
int b;
};
struct Str{
struct Node n;
}
//示例
struct Str s;
s.n.a=10;
s.n.b=20;
联合体
联合体又称共用体
union 名字{成员};
联合的所有成员引用的是内存中的相同位置,以最大的成员的内存长度作为union的内存大小
定义:
union Node{
char c;
short s;
int a;
double d;
};
联合体虽然可以有多个成员,但同一时间只能存放其中一种
以上是关于结构体与共用体(联合体)的主要内容,如果未能解决你的问题,请参考以下文章