字符数组是全局定义的,同名结构是在函数中定义的。为什么 sizeof 运算符为 c & c++ 返回不同的值?
char S[13];
void fun()
{
struct S
{
int v;
};
int v1 = sizeof(S);
}
// 在 C++ 中返回 4,在 C 中返回 13
因为在 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);
}
在 C 中,要引用结构类型,您需要说struct S
. 因此,sizeof(S)
指的是数组。
在 C++ 中,struct
是不必要的。所以本地S
隐藏了全局S
。