Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++ 奇怪的sizeof()结果_C++_C - Fatal编程技术网

C++ 奇怪的sizeof()结果

C++ 奇怪的sizeof()结果,c++,c,C++,C,当我在Mac上运行sizeof(r)时。它表示sizeof(r)=1。我的理解是,工会的规模是其最大组成部分的规模。在这种情况下,最大的元素不应该是结构吗 union { struct { char i:1; char j:2; char m:3; }s; char ch; }r; 结构s占用1+2+3=6位,适合1字节,并与1字节的字符联合。因此,答案是1字节。结构占用1+2+3=6位,适合1字节,并与1字节的

当我在Mac上运行sizeof(r)时。它表示sizeof(r)=1。我的理解是,工会的规模是其最大组成部分的规模。在这种情况下,最大的元素不应该是结构吗

union
{
    struct
    {
        char i:1;
        char j:2;
        char m:3;
    }s;

    char ch;
}r;

结构s占用1+2+3=6位,适合1字节,并与1字节的字符联合。因此,答案是1字节。

结构占用1+2+3=6位,适合1字节,并与1字节的字符联合。因此答案是1字节。

您的并集由两部分组成,一个结构和一个字符。联合的大小,因为它共享内存,是最大元素的大小,加上它所粘贴的任何填充的大小(在您的例子中是0字节)

首先,让我们看看每种格式的ideone报告的大小:

好的,两个都是1。因此,工会的规模也必须为1

结构由位字段组成。一个是1位,一个是2位,一个是3位。这样一个字节中的8位中总共有6位。由于它至少必须是一个字节(位字段的大小实际上不是以位为单位),因此大小为1

至于char,下面是C++11标准在§3.9.1/1[basic.basic]中所说的内容:

声明为字符(char)的对象应足够大以存储任何成员
实现的基本字符集。
对于几乎所有平台,这都是一个字节。

这是一个字节。

您的并集由两部分组成,一个结构和一个字符。联合的大小,因为它共享内存,是最大元素的大小,加上它所粘贴的任何填充的大小(在您的例子中是0字节)

首先,让我们看看每种格式的ideone报告的大小:

好的,两个都是1。因此,工会的规模也必须为1

结构由位字段组成。一个是1位,一个是2位,一个是3位。这样一个字节中的8位中总共有6位。由于它至少必须是一个字节(位字段的大小实际上不是以位为单位),因此大小为1

至于char,下面是C++11标准在§3.9.1/1[basic.basic]中所说的内容:

声明为字符(char)的对象应足够大以存储任何成员
实现的基本字符集。
对于几乎所有平台,这都是一个字节。

这是一个字节。

从技术上讲,您的位字段的总大小为0.75字节,字符的总大小为1字节。“我看不出问题所在。”克里斯,你能详细说明一下答案吗?谢谢可能在那一刻,r是char ch,而不是s struct。从技术上讲,您的位字段的总大小为0.75字节,char为1字节。“我看不出问题所在。”克里斯,你能详细说明一下答案吗?谢谢可能在那一刻,r是char ch,而不是s结构。划掉最后一句。这是字节的定义。联合的大小必须至少与其最大元素的大小相同。例如,
union x{short s;字符字节b[3];}
在我试过的一个平台上有4号,而
short
有2号,而
char[3]
有大小。。。3.@CharlesBailey,说得好,还有填充物。我会把它编辑进去,删掉最后一句。这是字节的定义。联合的大小必须至少与其最大元素的大小相同。例如,
union x{short s;字符字节b[3];}
在我试过的一个平台上有4号,而
short
有2号,而
char[3]
有大小。。。3.@CharlesBailey,说得好,还有填充物。我将在中编辑它。