简述自定义类型部分知识点

博客介绍了结构体相关知识,包括类型创建、初始化、内存对齐,指出内存对齐是拿空间换时间,传参传指针;还介绍了位段,其成员类型及空间开辟方式;此外,说明了枚举可一次性定义多常量防命名污染,联合成员共享空间,大小需考虑对齐。

【1】 结构体类型创建:结构体是存有相同或不同类型的变量的集合,结构体内成员变量不能为空。

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

在声明结构体的时候,可以不完全的声明。

struct        //匿名结构体
{
   int a;
   char b;
  }x;

有n个结构体就有n种类型,哪怕里面成员都一样。
结构体自引用方式:

struct node
{
    int data;
    struct node*next;//空间开辟长明确
};

重声明

typedef struct node
{
int data;
struct node* next;
}node;

【2】结构体初始化

struct stu
{
  char name[15];
  int age;
  };
  struct stu s={"zhangsan",21};
struct node
{
int data;
struct node*next;
}n1={10,NULL};
struct node n2={20,NULL};

【3】结构体内存对齐:
(1)结构体内存对齐是拿空间换时间的。
(2)编译器没有默认的对齐数,一般一个变量的对齐数就是它自身的大小。
(3)结构体总大小为最大对齐数的整数倍。
(4)第一个成员在与结构体偏移量为0的地址处。
(5)对齐:除了第一个变量,待放入变量的起始偏移量能整除对齐数,如果不对齐,让起始偏移量增大。
结构体传参传的是指针。
【4】位段:
(1)位段的成员必须是int ,unsigned int 或signed int 。
(2)位段的成员后边有一个冒号和一个数字。
(3)位段的空间上是按需要以4个字节或者1个字节的方式来开辟的。

struct A
{
int a:2;//比特位
int b:3;
int d:6;
}

【5】枚举 联合

enum color//枚举类型
{
  RED=1;//枚举常量
  BLACK;
  YELLOW;
  };
  enum Coloor clr=RED;

使用枚举,一次性可以定义多个常量,防止了命名污染。

联合也是一种特殊的自定义类型,这种变量包含一系列的成员,这些成员公用同一块空间。每一个变量都共享空间,都是第一个成员。
联合的大小至少是最大成员的大小,也要考虑是否对齐。

int main()
{
	union un//判断大小端
	{
		char a;
		int b;
	}Un;
	Un.b=1;
	printf("%d", Un.a);
	system("pause");
	return 0;
}
`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值