Инициализация указателей в C++

Вам необходимо переключить все зависимости на swift 3. В вашем случае Alamofire нужно переключить на Swift 3 ветку

9
задан Alex 22 May 2009 в 22:28
поделиться

4 ответа

Да, вы можете инициализировать указатели на значение при объявлении, однако вы не можете этого сделать:

int *p = &(1000);

& - это адрес оператора , и вы не можете применить что до константы (хотя, если бы вы могли, это было бы интересно). Попробуйте использовать другую переменную:

int foo = 1000;
int *p = &foo;

или приведение типов:

int *p = (int *)(1000); // or reinterpret_cast<>/static_cast<>/etc
23
ответ дан 4 December 2019 в 06:30
поделиться

В вопросе мне неясны две вещи. Вы хотите установить указатель на определенное значение (например, адрес) или хотите, чтобы указатель указывал на определенную переменную?

В последнем случае вы можете просто использовать оператор адресации. Затем значение указателя устанавливается на адрес из 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 (0) , которое было предложено в примечании и для которого я ранее предлагал обходной путь. См. Здесь .

7
ответ дан 4 December 2019 в 06:30
поделиться

Насчет:

// Creates a pointer p to an integer initialized with value 1000.
int * p = new int(1000); 

Проверено, работает. ; -)

5
ответ дан 4 December 2019 в 06:30
поделиться

Гм. Я не думаю, что вы можете взять неконстантный адрес такой константы.

но это работает:

int x = 3;
int *px = &x;
cout << *px; // prints 3

или это:

const int x = 3;
const int *px = &x;
const int *pfoo = reinterpret_cast<const int*>(47);
2
ответ дан 4 December 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: