Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

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

#cpp #указатели


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


Ответы

Ответ 1



*(*(p = new double*) = new double) = 2; Начнем с внутренней скобки p = new double* В переменную p записывается адрес памяти, выделенной для указателя double*, и само выражение имеет значение этого указателя. *(p = new double*) = new double Здесь оно разыменовывается и по адресу, который хранится в p, записывается значение указателя, выделенного под переменную double, каковое значение - указателя на double - и возвращается, а затем разыменовывается и в него уже записывается значение 2... Т.е. картинка выглядит примерно так:

Ответ 2



Если расписать элементарные действия по отдельности, то получится p = new double *; *p = new double; **p = 2; У вас все то же самое "свёрнуто" в одно выражение. Разумеется, все это имеет смысл только если переменная p объявлена заранее и объявлена с правильным типом.

Комментариев нет:

Отправить комментарий