• C

Constant Pointers and Constant Data

Hi, I have this useless program.

main() {
 int a=2, *pa=&a, *const kpa=&a;
 const int b=5, *pkb=&b, *const kpkb=&b;

 pkb=pa;              // 1.) OK
 *pkb=4;              // 2.) ERROR, because value that is pointed by pkb is constant.
 kpa=pa;              // 3.) ERROR, because kpa is a constant pointer.
 pa=kpkb;            // 4.) ERROR, because with pa we could change constant value that is pointed by kpkb.

 pa = (int*)kpkb;   // 5.) Correct! <---------- Why?

 *pa=4;               // 6.) OK.

And I understand why statemants 1, 2, 3, 4 and 6 are correct (incorrect), but I don't understand why statemant No. 5. is correct. What makes it different from statemant No 4? Can someone help me?
Who is Participating?
The difference is an explicit type cast:
in 5) you cast from (int * const) to (int *), it's correct. Then you assigns (int *) to (int *), thats also correct.
in 4) you dont cast and tries to assign (int * const) to (int *) it's an error (you have different types on the left and on the right) and no implicit cast possible.

Read here: http://www.possibility.com/Cpp/const.html

'C++ does not supply a standard conversion from a const type to a type that is not const.'
Statement No. 5 performs an explicit cast (int *) that overrides the defined type of kpkb.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.