2015-06-07 2 views
-4

Как получить адрес памяти постоянной переменной в C++. Когда я пытаюсь получить это, я получаю сообщение об ошибке.получить адрес памяти постоянной переменной в C++

int const nValue = 5; 
int * pnPtr = &nValue; 

Сообщение об ошибке приведено ниже. Я использую визуальную студию 2010.

Error 1 error C2440: 'initializing' : cannot convert from 'const int *' to 'int *' 

Есть ли способ сделать это?

+1

Снова прочитайте сообщение об ошибке, это довольно ясно. –

+0

Обратите внимание, что в C++ 'nValue' вообще не будет указываться адрес, если вы явно не используете его адрес, как вы (пытались сделать) здесь. Если вы явно не используете свой адрес с выражением '& nValue', ссылки на константу' nValue' заменяются литеральным значением '5'. – Clifford

ответ

1

«Есть ли способ сделать это?»

Несомненно. Вам нужен const int* указатель, чтобы получить этот адрес, как сообщение об ошибке говорит:

int const nValue = 5; 
    const int * pnPtr = &nValue; 
// ^^^^^ 

int* указатель позволит изменить nValue, которая не является законным, и поэтому компилятор жалуется.


Что касается вашего комментария. A const int* можно использовать для указания обычных intи a const int. Дело в том, что вы не можете использовать его для изменения базовой памяти по адресу, который она хранит.

Переменная-указатель не является const и может быть изменен на другой адрес.

Если вы хотите, и атрибуты, которые вы должны будете написать:

const int const * pnPtr = &nValue; 
//^  ^
// |   + prevents changing the pointer after initialization 
// +- prevents changing the underlying memory 
+0

'int nValue = 5; \t int nValue2 = 6; \t const int * pnPtr = & nValue; \t cout << pnPtr << endl; \t pnPtr = & nValue2; \t cout << pnPtr << endl; 'здесь pnPtr постоянна. когда я запускаю этот код, он дает разные адреса. как это возможно. –

+0

@SharthrakNiroshan Что вы на самом деле пытаетесь сказать с этим? –

+0

Может ли постоянный указатель указать другое значение? –

1

Вы должны использовать указатель на const int значения, как это:

int const *ptr = &nValue; 

C++ является строгим относительно сопзЬ корректности , и это хорошо.

Смежные вопросы