unsigned long 1nt A = 0Xcc77ffaa:
unsigned short int* pint = (unsigned short int*) &A:
unsigned char* pchar = (unsigned char *) &A:
printfC I ^x I ^x I ^x I". A. *pint. *pchar):
return 0:
}
на IBM РС-совместимом компьютере выведет на экран строку^:
I cc77ffaa | ffaa | аа |
Значения указателей pint и pchar одинаковы, но разадресация pchar дает в резуль тате один младший байт по этому адресу, а pint — два младших байта.
приведенном выше примере при инициализации указателей были использова ны операции приведения типов. Синтаксис операции явного приведения типа прост: перед именем переменной в скобках указывается тип, к которому ее требу ется преобразовать. При этом не гарантируется сохранение информации, поэто му в общем случае явных преобразований типа следует избегать. Подробнее опе рация приведения типов рассмотрена на с. 231.
При смешивании в выражении указателей разных типов явное преобразование типов требуется для всех указателей, кроме void*. Указатель может неявно пре образовываться в значение тина boo! (например, в выражении условного опера тора), при этом ненулевой указатель преобразуется в true, а нулевой в false.
Присваивание без явного приведения типов допускается в двух случаях:
если тип указателей справа и слева от операции присваивания один и тот же.
Старые версии компилятора могут выдать в результате строку | ffaa | сс77 | ffaa
Таким образом, неявное преобразование выполняется только к типу void*. Зна чение О неявно преобразуется к указателю на любой тип. Присваивание указате лей на объекты указателям на функции (и наоборот) недопустимо. Запрещено и присваивать значения указателям-константам, впрочем, как и константам любо го типа (присваивать значения указателям на константу и переменным, на кото рые ссылается указатель-константа, допускается).
Достарыңызбен бөлісу: |