有了這個定義
struct A {
int x;
};
為什么是
struct A a = {0};
有效的語法而
struct A a;
a = {0};
產生錯誤,“'{' 標記之前的預期運算式”?
如果我用
a = (struct A){0};
那么一切都很好,所以分配給結構不是問題。
uj5u.com熱心網友回復:
花括號語法{}指定一個初始化串列,并且這樣的串列只能用于初始化。
在這種情況下:
struct A a = {0};
a正在宣告和初始化,{0}并且是有效的語法。
這是無效的:
a = {0};
因為這是一個運算式,所以初始化串列不能出現在運算式中。
這個:
a = (struct A){0};
不是強制轉換,而是復合文字的示例。語法類似于強制轉換,但它所做的是創建一個型別的物件struct A并為它提供一個初始值設定項。然后將該物件分配給a。
uj5u.com熱心網友回復:
您只能在宣告中使用初始值設定項,因此宣告a = {0};無效。
在陳述句中,a = (struct A){0};您實際上是使用有效的復合文字運算式進行分配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338868.html
下一篇:C中的Strlen安全
