Преобразование типа указателя
Указатель можно преобразовать к другому типу. Это важно. Компилятор должен знать размер памяти той переменной, на которую ссылается указатель. В языке С++ требуется явное преобразование типа указателя в операции присваивания. long *ptrl; double *ptrd; ptrl = (long *)ptrd; //указателю на long присваивается значение, ссылающееся на double; Синтаксис операции явного приведения типа прост: перед именем переменной в скобках указывается тип, к которому ее требуется преобразовать. При этом не гарантируется сохранение информации, поэтому в общем случае явных преобразований типа следует избегать. При смешивании в выражении указателей разных типов явное преобразование типов требуется для всех указателей, кроме void*. Указатель на void применяется в тех случаях, когда конкретный тип объекта, адрес которого требуется хранить, не определен (например. если в одной и той же переменной в разные моменты времени требуется хранить адреса объектов разного типа). Указателю на void можно присвоить значение указателя любого типа, а так же сравнивать его с любыми указателями, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать его к конкретному типу явным образом. (тип (выражение)) Указатель может неявно преобразовываться в значение типа bool (например, в выражении условного оператора), при этом ненулевой указатель преобразуется в true, а нулевой в false. Присваивание без явного приведения типов допускается в двух случаях: · указателям типа void*; · если тип указателей справа и слева от операции присваивания один и тот же. Значение 0 неявно преобразуется к указателю на любой тип. Присваивание указателей на объекты указателям на функции (и наоборот) недопустимо. Запрещено и присваивать значения указателям-константам, впрочем, как и константам любого типа (присваивать значения указателям на константу и переменным, на которые ссылается указатель-константа, допускается).
|