Инициализация указателя структуры с помощью оператора -> - PullRequest
0 голосов
/ 27 апреля 2019

Я должен инициализировать структуру, используя точку к ней, таким образом, что upper_left - это точка (10,25) и lower_right (20,15)

struct point {int x, y;};
struct rectangle {struct point upper_left, lower_right;};

struct rectangle *p;

p = malloc(sizeof(*p));

p->upper_left.x = 10;
p->upper_left.y = 25;
p->lower_right.x = 20;
p->lower_right.y = 15;


Есть ли способ сделатьэто более "компактный" и не один за другим?Я пробовал это, но ошибки от компилятора те же "Ожидаемое выражение до '{' токена"

p->upper_left = {10, 25};
p->lower_right = {20,15};

/////////////
p->upper_left = {.x = 10, .y = 25};
p->lower_right = {.x = 20, .y = 15};

//////////////////////////////

*p = {.upper_left = {10, 25}, .lower_right = {20, 15}};

1 Ответ

3 голосов
/ 27 апреля 2019

Да, составной литерал

  p->upper_left = (struct point){10, 25};

  *p = (struct rectangle){.upper_left = {10, 25}, .lower_right = {20, 15}};

Вы можете поэкспериментировать себя здесь: https://godbolt.org/z/yw_JC0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...