sizeof运算符返回c&的不同值。 C ++?

时间:2012-05-20 02:12:56

标签: c++ c

全局定义字符数组,并在函数内定义具有相同名称的结构。为什么sizeof运算符返回c&的不同值c ++?

char S[13];
void fun()
{
    struct S
    {
        int v;
    };
    int v1 = sizeof(S);
}

//在C ++中返回4,在C中返回13

2 个答案:

答案 0 :(得分:15)

因为在C ++中,您定义的struct被命名为S,而在C中,它被命名为struct S(这就是您经常看到C代码中使用的typedef struct的原因)。如果您要将代码更改为以下内容,您将获得预期的结果:

char S[13];
void fun()
{
    typedef struct tagS
    {
        int v;
    } S;
    int v1 = sizeof(S);
}

答案 1 :(得分:10)

在C中,要引用结构类型,您需要说struct S。因此,sizeof(S)指的是数组。

在C ++中,struct是不必要的。因此,本地S隐藏了全局S