C语言:结构体的空间分配和位定义

目录

  • 概述
  • 空间分配
  • 位定义

概述

本文收录结构体相关的知识点,将遇到的相关问题和找到的解释说明集中在一起,便于需要时快速查找。

空间分配

请计算以下两个结构体所占用的空间大小:

	struct CAT {
		char a;
		short b;
		int c;
		short d;
	}cat; 
	
	struct DOG {
		int a;
		short b;
		short c;
		char d;
	}dog;

可以看到,这两个结构体组成元素是相同的,只是定义时的顺序不同。使用sizeof查看占用的内存大小:
C语言:结构体的空间分配和位定义_第1张图片
1个char+2个short+1个int,不应该是1+4+4=9吗,为什么会是12?空间分配的过程是怎么样的?

struct内存原则: 从上至下进行内存分配,对齐方式以当前分配到的内部成员类型最宽字节数为基准;整体以结构体成员最宽类型字节为基准,且整个结构体的总大小为最宽基本类型成员大小的整数倍。点击跳转

位定义

请用结构体表示以下一帧CAN信息:
11bit的ID、1bit的RTR、3bit的长度、8byte的数据,
要求使用的空间尽可能小。
从空间要求上看,可以知道这是考验对结构体位定义的使用:

struct CANFRAME {
	uint16_t ID : 11;
	uint16_t RTR : 1;
	uint16_t LEN : 3;
	uint8_t DATA[8];
}

需要注意,使用位定义的成员,类型应相同(更多解析)。

你可能感兴趣的:(C语言进阶,位定义,结构体)