Здравствуйте. Я новичок.Сейчас пытаюсь разобраться с темой указателей. В книге которую читаю есть пример "выбор данных из памяти с помощью разных указателей"
unsigned long L = 0x12345678L;
char *cp = (char*)&L;
int* ip = (int*)&L;
cout<<hex;
сout<<"&L = "<<&L<<endl;
cout<<"cp = "<<(void*)cp<<"\t *cp = 0x"<<*cp<<endl;
сout<<"ip = "<<(void*)ip<<"\t *ip = 0x"<<*ip<<endl;
соответственно результат выполнения:
&L = 0x1E190FFC
cp = 0x1E190FFC *cp = 0x78
ip = 0x1E190FFC *ip = 0x5678
Когда речь идет о преобразовании обычных типов вроде все ясно(для чего и что происходит).
А вот когда вижу
char *cp = (char*)&L;
int* ip = (int*)&L;
Мне не совсем понятно что фактически происходит в преобразовании (char*)&L или (int*)&L. В приведенном выше примере результат программы показывает что адрес L и значение указателей cp и ip фактически одинаково = 0x1E190FFC. Это ведь адрес ячейки памяти, зачем его приводить к типу? При этом как я понимаю что значением указателя ip например, является адрес переменной L и при обращении к ее значению через операцию разыменования (*ip) из 4-х байт переменной L будет выбрано 2 байта информации поскольку указатель имеет тип int. Это демонстрирует и результат программы. Что происходит фактически с адресом &L когда его приводят к типу (char*) или (int*) и происходит ли вообще??? Он ведь остается прежним! Поясните пожалуйста момент приведения к типу указателя. Заранее спасибо.