• 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?
LVL 7
Who is Participating?

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
Statement No. 5 performs an explicit cast (int *) that overrides the defined type of kpkb.
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.