c++ - Why can't I change address of a pointer of type `const int *` when passed as function argument? -
as far know, const int *
implies can change pointer not data, int * const
says can't change pointer address can change data, , const int * const
states can't change of them.
however, can't change address of pointer defined type const int *
. here example code:
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 try pass func(). std::cout << pint << '\t' << *pint << std::endl; std::cout << "-------------------" << std::endl; (int i=0; i<5; i++) { func(pint); // set pointer internal variable. (but, doesn't set it!) std::cout << pint << '\t' << *pint << std::endl; } return 0; }
code output:
00d2f9c4 0 ------------------- 00d2f9c4 0 00d2f9c4 0 00d2f9c4 0 00d2f9c4 0 00d2f9c4 0
i expect address of pint
change point internal variable inside func()
function after calling func()
@ least once. doesn't. keeps pointing @ dummy
variable.
what happening here? why don't result expect?
(ide: visual studio 2015 community version)
you don't see change @ call site because passing pointer value. modifying inside func
change local copy, not pointer passed in.
if want modify pointer , have changes visible outside, pass reference:
void func(const int *& pint) // ^
Comments
Post a Comment