全局定义字符数组,并在函数内定义具有相同名称的结构。为什么sizeof运算符返回c&的不同值c ++?
char S[13];
void fun()
{
struct S
{
int v;
};
int v1 = sizeof(S);
}
//在C ++中返回4,在C中返回13
答案 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
。