2017-07-24 42 views
1

鑑於這種結構:如何使用指向另一個字段的字段初始化結構?

typedef struct test { 
    char field1[20]; 
    char *field2; 
} test_s 

如何初始化這種用指定初始化結構的,知道我要FIELD2指向FIELD1?

test_s test = {.field1[0] = '\0', .field2 = .field1}; 

不起作用。

+0

https://開頭gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html – rsp

+1

@rsp 也許我誤解了一些東西,但是沒有線索可以做「varName.designator」。事實上,我沒有看到任何有用的情況。您爲什麼鏈接本手冊? –

回答

5

在單項目申報的情況下,你可以使用變量的名字被宣佈,因爲編譯器可以初始化過程中在任何時間地址:

test_s test = {.field1[0] = '\0', .field2 = test.field1}; 

Demo.

+0

如果我不知道變量的名稱會怎麼樣? –

+2

@湯姆的什麼是上下文? – dasblinkenlight

+0

'#define TEST_CONSTRUCTOR {.field1 [0] ='\ 0',.field2 = .field1}'像'test_s varname = TEST_CONSTRUCTOR'一樣使用。我知道我可以做'#define TEST_CONSTRUCTOR(varName){.field1 [0] ='\ 0',.field2 = varName.field1}'但我想知道是否不傳遞變量名是可能的。 –