字符數組是全局定義的,並且具有相同名稱的結構在函數中定義。爲什麼sizeof運算符返回不同的值C++ cC++?sizeof運算符爲c和C++返回不同的值?
char S[13];
void fun()
{
struct S
{
int v;
};
int v1 = sizeof(S);
}
//返回4在C++和13用C
字符數組是全局定義的,並且具有相同名稱的結構在函數中定義。爲什麼sizeof運算符返回不同的值C++ cC++?sizeof運算符爲c和C++返回不同的值?
char S[13];
void fun()
{
struct S
{
int v;
};
int v1 = sizeof(S);
}
//返回4在C++和13用C
因爲在C++中,struct
你定義被命名爲S
,而在C,它的命名struct S
(這就是爲什麼你經常看到的C代碼使用typedef struct
)。如果你要改變的代碼下面,你會得到預期的結果:
char S[13];
void fun()
{
typedef struct tagS
{
int v;
} S;
int v1 = sizeof(S);
}
使用名稱以下劃線開頭,後跟大寫字母是個壞主意,因爲這些名稱是[reserved](http://stackoverflow.com/questions/228783/)用於實現。 – fredoverflow
夠公平的。稍作修改(並不是說爲了這個例子,它很重要)。 –
在C語言中,指的結構類型,你需要說struct S
。因此,sizeof(S)
指的是數組。
在C++中,struct
是不必要的。所以本地S
隱藏全球S
。
@OliCharlesworth:編譯在我的編譯器 – Ashwyn
@Ashwyn精 - 你的編譯器編譯沒有',''後結構S'」宣言? – birryree
@OliCharlesworth:哎呀抱歉!忘了寫,實際上我寫了那個代碼,而不是複製粘貼! – Ashwyn