сдать домашний экзамен?: -)
Давайте сначала возьмем кастинг.Каждый объект в C или C ++ имеет тип , который представляет собой не что иное, как имя, которое дает два вида информации: сколько памяти занимает эта вещь и какие операции над ней можно выполнить.
То есть
int i;
просто означает, что i
относится к некоторому месту в памяти, обычно шириной 32 бита, для которого можно выполнить +,-,*,/,%,++,--
и некоторые другие.
Ciне очень требователен к этому, хотя:
int * ip;
определяет другой тип, называемый указатель на целое число , который представляет адрес в памяти.У него есть дополнительная операция, префикс- *.На многих машинах также имеет ширину 32 бита.
A cast или typecast говорят компилятору обрабатывать память, определенную какодин тип, как если бы это был другой тип.Типы написаны как (typename)
.
Так что
(int*) i;
означает «обрабатывать i
как указатель», а
(int) ip;
означает «обрабатывать»указатель ip
как целое число.
Теперь в этом контексте расширение и сужение означают приведение к одному типу к другому, имеющему больше или меньше битсоответственно.