结构体与共用体(联合体)

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;

};

联合体虽然可以有多个成员,但同一时间只能存放其中一种

以上是关于结构体与共用体(联合体)的主要内容,如果未能解决你的问题,请参考以下文章

结构体与共用体

C语言 共用体/联合体 union

关于c语言中联合体/共用体中数据存放的问题?

结构体与共用体

结构体与共用体

实验6 结构体共用体与枚举