[英]What is the meaning of “typedef char CHAR[10];”?
遇到了一段定義和使用typedef的代碼,如下所示:
typedef char CHAR[10];
void fun(std::string s) {}
int main()
{
CHAR c;
fun(c);
}
奇怪的是,這可行。 我的問題是為什么要定義和使用像這樣的typedef及其工作方式。 在我看來,僅CHAR不應起作用,而應始終為CHAR [10]。
此外,如果我更改fun聲明以接受std :: string&而不是std :: string,它會引發編譯錯誤。 我不知道為什么。
這是C聲明程序語法的一個令人困惑的部分,它沒有執行您認為的操作。
拋棄邏輯並遵循螺旋規則 。
使CHAR[10]
表示char
。
使CHAR
char[10]
。
這就是為什么“非常獨自”使用CHAR
在這里完全有效的原因。 我的意思是說真的,首先,對一個固定大小的數組進行typedeff是很愚蠢的,但是將其命名為CHAR
就是餅干。
typedef char CHAR[10];
void fun(std::string s) {}
int main()
{
CHAR c;
fun(c);
}
相當於
void fun(std::string s) {}
int main()
{
char c[10];
fun(c);
}
從語法上講,這是正確的代碼,因為std::string
可以從char*
構造。 但是,該代碼是未定義行為的原因,因為尚未初始化c
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.