首页 > 解决方案 > 为什么这段代码在结构中包含冒号?

问题描述

请解释这段代码是如何执行的。为什么我们在结构中使用“:”。结构中冒号的用途是什么。应该是 sizeof 运算符的输出。

#include <stdio.h>
int main()
{
struct bitfield {
    signed int a : 3;
    unsigned int b : 13;
    unsigned int c : 1;
};
struct bitfield bit1 = { 2, 14, 1 };
printf("%ld", sizeof(bit1));
return 0;
}

标签: cstructunsignedsigned

解决方案


它是位域语法的一部分。这里指的是a占用 3 位、b13 位和c仅 1 位。当然,该结构不会只占用内存中的 17 位,因为它必须与作为最小可寻址内存单元的字节对齐,因此sizeof(bit1)至少需要 3 个字节(可能它会与与机器字相关的某个值对齐,例如4字节)。您可以在此处阅读有关对齐的更多信息:Structure padding and packing。我假设 1 个字节是 8 位大小,但有一些旧的或奇异的架构,其中字节有另一个大小。


推荐阅读