Как использовать член структуры, определенной составным литералом? - PullRequest
1 голос
/ 02 марта 2020

Я нашел этот фрагмент кода, который использует указатель на структуру, составленную из составного литерала:

int main()
{
   struct s {int i; int x;} *p;
   int j = 0;

   p = &((struct s){ j++ });
}

Мои вопросы:

  • Как это сделать j++ допустимое выражение для изменения i и / или x и для чего оно оценивается?
  • И как я могу получить доступ к члену i или x? Смещение указателя p?

1 Ответ

3 голосов
/ 02 марта 2020

В составном литерале любые неопределенные члены инициализируются по умолчанию, как и список инициализаторов для объекта. Таким образом,

(struct s){ j++ })

эквивалентно

(struct s){ j++, 0 })

j++ - это старое значение j до увеличения j, как и в любом другом назначении. Таким образом, это установит p->i = 0 и j = 1.

Вы можете получить доступ к элементам, используя разыменование указателя.

int x = p->x;
int i = p->i;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...