Почему я не могу изменить адрес указателя типа `const int *` при передаче в качестве аргумента функции?

Насколько я знаю, const int * подразумевает, что я могу изменить указатель, но не данные, int * const говорит, что я не могу изменить адрес указателя, но я могу изменить данные, и const int * const заявляет, что я не могу изменить ни одного из них.

Тем не менее, я не могу изменить адрес указателя, определенного с типом const int *, Вот мой пример кода:

void Func(const int * pInt)
{
static int Int = 0;
pInt = ∬
Int++;
}

int wmain(int argc, wchar_t *argv[])
{
int Dummy = 0;
const int * pInt = &Dummy;
//const int * pInt = nullptr;   // Gives error when I try to pass it to Func().
std::cout << pInt << '\t' << *pInt << std::endl;
std::cout << "-------------------" << std::endl;
for (int i=0; i<5; i++)
{
Func(pInt);     // Set the pointer to the internal variable. (But, it doesn't set it!)
std::cout << pInt << '\t' << *pInt << std::endl;
}
return 0;
}

Вывод кода:

00D2F9C4        0
-------------------
00D2F9C4        0
00D2F9C4        0
00D2F9C4        0
00D2F9C4        0
00D2F9C4        0

Я ожидал бы адрес pInt изменить, чтобы указать на внутреннюю переменную внутри Func() функция после вызова Func() по крайней мере, один раз. Но это не так. Я продолжаю указывать на Dummy переменная.

Что здесь происходит? Почему я не получаю ожидаемый результат?

(IDE: версия сообщества Visual Studio 2015)

0

Решение

Вы не видите изменения на сайте вызовов, потому что передаете указатель по значению. Модифицируя это внутри Func просто изменит локальную копию, а не переданный указатель.

Если вы хотите изменить указатель и сделать изменения видимыми снаружи, передайте его по ссылке:

void Func(const int *& pInt)
//                   ^
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]