Есть две вещи, неясные для меня в этом вопросе. Вы хотите установить указатель на определенное значение (то есть адрес), или вы хотите, чтобы указатель указывал на какую-то конкретную переменную?
В последнем случае вы можете просто использовать адрес оператора. Значение указателя затем устанавливается на адрес из some_int_variable
.
int *p = &some_int_variable;
*p = 10; // same as some_int_variable = 10;
Примечание : Далее следует злое изменение значения указателя вручную. Если вы не знаете, хотите ли вы это сделать, вы не хотите этого делать.
В первом случае (т. Е. Установка какого-то определенного, заданного адреса) вы не можете просто сделать
int *p = 1000;
Поскольку компилятор не принимает int и интерпретирует его как адрес. Вы должны будете указать компилятору, что он должен делать это явно:
int *p = reinterpret_cast<int*>(1000);
Теперь указатель будет ссылаться на некоторое целое число (надеюсь) по адресу 1000. Обратите внимание, что результат определяется реализацией. Но тем не менее, это семантика, и именно так вы говорите об этом компилятору.
Обновление : Комитет исправил странное поведение reinterpret_cast<T*>(0)
, которое было предложено в записке и для которого я уже предлагал обходной путь. Смотрите здесь .