что означает это строка кода *(*(p = new double*) = new double) = 2;

103
05 мая 2021, 09:50

что означает это строка кода *(*(p = new double*) = new double) = 2;

Answer 1
*(*(p = new double*) = new double) = 2;

Начнем с внутренней скобки

p = new double*

В переменную p записывается адрес памяти, выделенной для указателя double*, и само выражение имеет значение этого указателя.

*(p = new double*) = new double

Здесь оно разыменовывается и по адресу, который хранится в p, записывается значение указателя, выделенного под переменную double, каковое значение - указателя на double - и возвращается, а затем разыменовывается и в него уже записывается значение 2...

Т.е. картинка выглядит примерно так:

Answer 2

Если расписать элементарные действия по отдельности, то получится

p = new double *;
*p = new double;
**p = 2;

У вас все то же самое "свёрнуто" в одно выражение.

Разумеется, все это имеет смысл только если переменная p объявлена заранее и объявлена с правильным типом.

READ ALSO
Есть ли в Windows сигналы похожие на те что в POSIX?

Есть ли в Windows сигналы похожие на те что в POSIX?

А нет ли в Windows ничего такого, похожего на сигналы в POSIX?

75
Не запускается проект CMake

Не запускается проект CMake

Установил wxWidget, решил запустить пример в CMakeВсё настроил, всё подключил

106
Движение противника в игровом цикле

Движение противника в игровом цикле

Пишу простенькую игру на sfmlНе буду вдаваться в подробности - опишу кратко, как все реализовано

88