我想知道在 C 中是否可以通過以下方式初始化結構:
struct Test* test = { .int_value = 10, .char_value = 'c', .pointer_to_float_value = (float*)1.512 };
如果我嘗試使用以某種方式定義的結構來執行此操作:
struct Test
{
int int_value;
char char_value;
float* pointer_to_float_value;
};
我得到結構的所有元素的錯誤:
error: field name not in record or union initializer
有沒有辦法繞過這個問題?
uj5u.com熱心網友回復:
這種語法
struct Test* test { .int_value = 10, .char_value = 'c', .pointer_to_float_value = (float*)1.512 };
是無效的。
相反,您可以使用復合文字,例如
float f = 1.512f;
struct Test* test = &( struct Test ){ .int_value = 10, .char_value = 'c', .pointer_to_float_value = &f };
來自 C 標準(6.5.2.5 復合文字)
5 復合文字的值是由初始化串列初始化的未命名物件的值。如果復合文字出現在函式體之外,則該物件具有靜態存盤持續時間;否則,它具有與封閉塊關聯的自動存盤持續時間。
uj5u.com熱心網友回復:
這確實是可能的,但是您正在宣告一個指向結構的指標并嘗試將其初始化為一個結構(而不??是指標)。指向浮動的指標也存在同樣的問題。以下應該有效:
float a = 1.512;
struct Test test_struct = { .int_value = 10, .char_value = 'c', .pointer_to_float_value = &a };
struct Test *test = &test_struct;
uj5u.com熱心網友回復:
您的代碼存在許多問題。您沒有=符號,也沒有正確處理指標和型別。
可以這樣做:
struct Test * test = &(struct Test){ .int_value = 10,
.char_value = 'c',
.pointer_to_float_value = &(float){1.512f} };
注意它如何(struct Test)設定復合文字的型別并&獲取指向它的指標。這同樣適用于浮動指標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/415838.html
標籤:
