Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C结构的尺寸_C - Fatal编程技术网

C结构的尺寸

C结构的尺寸,c,C,我得到的输出是2:1 你能告诉我这个程序是如何工作的吗?这里的:运算符(a:1)有什么用 谢谢此处使用的:运算符指定了此处包含的字段的位大小sizeof()返回字节边界长度,因此第一个为13位(2字节),第二个为1字节。此处使用的:运算符指定此处包含字段的位大小sizeof()返回字节边界长度,因此第一个为13位(2字节),第二个为1字节。该:定义了一个 在您的示例中,struct st1类型的对象以编译器选择的某种排列方式使用13位 编译代码时选择的特定排列产生了一个占用2字节的对象。13位不

我得到的输出是2:1

你能告诉我这个程序是如何工作的吗?这里的:运算符(a:1)有什么用


谢谢

此处使用的
运算符指定了此处包含的字段的位大小
sizeof()
返回字节边界长度,因此第一个为13位(2字节),第二个为1字节。

此处使用的
运算符指定此处包含字段的位大小
sizeof()
返回字节边界长度,因此第一个为13位(2字节),第二个为1字节。

定义了一个

在您的示例中,
struct st1
类型的对象以编译器选择的某种排列方式使用13位

编译代码时选择的特定排列产生了一个占用2字节的对象。13位不一定是这些字节中的第一个(或最后一个)


另一个结构类型(
struct st2
)占用1字节中的3位。

定义了一个

在您的示例中,
struct st1
类型的对象以编译器选择的某种排列方式使用13位

编译代码时选择的特定排列产生了一个占用2字节的对象。13位不一定是这些字节中的第一个(或最后一个)


另一种结构类型(
struct st2
)占用(1字节中的3位)。

这里至少有两件事值得注意:

  • 每个对象都必须是可寻址的,这意味着它将至少占用一个字符的大小
  • 该实现可以根据需要为对齐或其他问题自由添加填充。依此,包含两个int的结构不保证大小等于sizeof(int)*2

  • 这里至少有两件事值得注意:

  • 每个对象都必须是可寻址的,这意味着它将至少占用一个字符的大小
  • 该实现可以根据需要为对齐或其他问题自由添加填充。依此,包含两个int的结构不保证大小等于sizeof(int)*2

  • 您的
    printf
    语句不正确,一个好的编译器可能会给您一个警告。。。
    size\u t
    的格式说明符是
    %zu
    z
    size\u t
    的大小,而
    u
    是无符号值。您的
    printf
    语句不正确,一个好的编译器可能会给您一个警告。。。
    size\u t
    的格式说明符是
    %zu
    z
    size\u t
    的大小,而
    u
    是无符号值。
    struct st1{
        int a:1; int b:3; int c:6; int d:3;
    }s1;
    
    struct st2{
        char a:3;
    }s2;
    
    int main(){
        printf("%d : %d",sizeof(s1),sizeof(s2));
        getchar();
    }