присваивается значение из указателя на а, верно?
Значение из адреса, где адрес — это число, которое лежало в a Кажется, это может работать в таком случае int *x = new int; *x = 42; int a = (int) x; // записываем адрес указателя в int int aa = *(int *)a; // читаем значение из адреса, в aa будет 42 delete x;
звездочка в начале применяется ко всему что написано после нее а не только к тому что в скобках?
Звездочка разве ставится не только перед именем указателя?
в последней строке звездочка после знака "=" забирает значение по адресу в указателе который закастован на определенный тип
На всякий случай подскажу, что приводить указатель к целочисленному типу можно только при условии достаточности ширины этого целочисленного типа для вмещения всех возможных значений указателя. В частности, для этого могут использоваться типы std::intptr_t и std::uintptr_t из <cstdint>, если предоставляются (знаковый и беззнаковый соответственно).
В связи с этим есть 2 вопроса: 1) Как правильно читается конструкция (void *)? понятно что она приводит указатель к типу но как это прочитать 2) Почему нельзя создавать указатель на саму переменную а только на ее адрес, это как-то связано с работой с памятью?
На всякий случай - все ещё чуть хуже, в С++ указатель на адрес объекта, а не памяти
ну это понятно, адрес ячейки памяти то
Это не одно и то же, если в той же ячейке памяти в итоге появится другой объект
А, ну да, переписать значение ж можно
Но вопросы все же актуальны
Первый вопрос не очень понятен. Насчет второго - указатели являются самостоятельными типами данных. Если Вам требуется неявное подобное "создание" - для этого есть ссылки (они во многом различны, не только в этом).
Ну вот на второй вопрос - адрес берётся у объекта, собственно, а переменная - его имя
Объект с именем это переменная
Первый вопрос скорее в том, зачем при явно приведении типов в данном случае используется указатель на тип данных а не сам тип данных
Ну такое int x = 0; x.~int(); new (&x) int(42);
Так и приводите Вы указатель, в таком случае, а не сам объект "под ним". Убедитесь, что понимаете, что результатом вычисления (int*) a при определении int a; не вернет адрес a.
https://godbolt.org/z/eaMY8bYfx
А, вот в чем разница, спасибо большое
Обсуждают сегодня