6

字符数组是全局定义的,同名结构是在函数中定义的。为什么 sizeof 运算符为 c & c++ 返回不同的值?

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

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

4

2 回答 2

15

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

char S[13];
void fun()
{
    typedef struct tagS
    {
        int v;
    } S;
    int v1 = sizeof(S);
}
于 2012-05-20T02:17:29.440 回答
10

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

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

于 2012-05-20T02:17:19.103 回答