-1
C11給我們帶來了整潔的結構初始化語法:任何方式來初始化動態分配的結構?
struct some_struct {int some; char value;};
struct some_struct s = {.some = 5, .value = 'a'};
printf("some = %d, value = %c\n", s.some, s.value);
但是,它似乎不工作的時候該結構具有動態分配:
struct some_struct {int some; char value;};
struct some_struct *s = malloc(sizeof(struct some_struct));
*s = {.some = 5, .value = 'a'};
printf("some = %d, value = %c\n", s->some, s->value);
此代碼產量:
error: expected expression before ‘{’ token
*s = {.some = 5, .value = 'a'};
^
struct some_struct {int some; char value;};
struct some_struct *s = malloc(sizeof(struct some_struct));
*s = struct some_struct {.some = 5, .value = 'a'};
printf("some = %d, value = %c\n", s->some, s->value);
而這種代碼可得:
error: expected expression before ‘struct’
*s = struct some_struct {.some = 5, .value = 'a'};
^~~~~~
是否有任何C的方式來初始化動態分配的結構是很好的或者我寧願寫類似的東西:
struct some_struct {int some; char value;};
struct some_struct *s = malloc(sizeof(struct some_struct));
s->some = 5;
s->value = 'a';
printf("some = %d, value = %c\n", s->some, s->value);
因爲(a)它意味着該結構的每個成員都佔有自己的路線,因爲人們往往當他們看到不是一個;
標誌其行的源代碼的最後標誌皺眉哪個稍微不便是,和(b)我不能像在正常的結構體初始化中那樣依賴初始化爲0
的未指定的值。
限定「initialiser」struct#「const」,否則根據編譯器優化程度的不同,最終可能會有兩個副本。儘管它是名稱,但是_compound literal_不是一個常量。 – Olaf
只要補充一點,這仍然不是初始化,而是一項任務。 –
@AjayBrahmakshatriya對,我們正在努力使作業在那裏工作。 :) –