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

Ash*_*wyn 6 c c++

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

char S[13];
void fun()
{
    struct S
    {
        int v;
    };
    int v1 = sizeof(S);
}
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*ras 15

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

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


Oli*_*rth 10

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

在C++中,struct是不必要的.所以当地人S隐藏了全球S.