#include <iostream>
using namespace std;
int main(int argc, const char** argv) {
int a = 10;
const int* p = &a;
const int ca = 30;
int* q;
cout << "a adress is:\t" << &a << "\ta is:\t" << a << endl;
cout << "p adress is \t" << p << "\t*p is \t" << *p << endl;
q = const_cast<int*>(p);
*q = 24;
cout << "a adress is:\t" << &a << "\ta is:\t" << a << endl;
cout << "p adress is \t" << p << "\t*p is \t" << *p << endl;
cout << "q adress is \t" << q << "\t *q is\t" << *q << endl;
cout << "=======================" << endl;
p = &ca;
q = const_cast<int*>(p);
*q = 50;
cout << "ca adress is:\t" << &ca << "\tca is:\t" << ca << endl;
cout << "p adress is \t" << p << "\t*p is \t" << *p << endl;
cout << "q adress is \t" << q << "\t *q is\t" << *q << endl;
cout << "=======================" << endl;
int& l = const_cast<int&>(ca);
l++;
cout << "ca adress is:\t" << &ca << "\tca is:\t" << ca << endl;
cout << "p adress is \t" << p << "\t*p is \t" << *p << endl;
cout << "q adress is \t" << &l << "\t *q is\t" << l << endl;
cout << "=======================" << endl;
int cc = 11;
const int aa = cc;
int* q1 = const_cast<int*>(&aa);
(*q1)++;
cout << "ca adress is:\t" << &aa << "\tca is:\t" << aa << endl;
cout << "ca adress is:\t" << q1 << "\tca is:\t" << *q1 << endl;
return 0;
}