Загрузка...

Объявления указателей и приведение типов


Указатель представляет собой переменную, содержащую адрес другой переменной. Объявление указателя всегда должно устанавливать его на некоторый конкретный тип, даже если этот тип void (что фактически означает указатель на любой тип).

Если type есть любой предопределенный или определенный пользователем тип, включая void, то объявление

type *ptr;

объявит ptr как "указатель на тип type". К объявленному таким образом объекту ptr применимы все правила, связанные с контекстом, продолжительностью жизни и видимостью.

Указатель со значением NULL это адрес, гарантированно отличный от любого допустимого указателя, используемого в программе. Объявление

void *vptr;

объявляет, что vptr — это родовой указатель, которому может быть присвоено любое значение "указатель на тип type" без выдачи компилятором сообщений. Без правильного приведения типов между "указателем на тип type1" и "указателем на тип type2", где type1 и type2 это различные типы, присвоение может вызвать предупреждение или ошибку компилятора. Если type1 это указатель на void, приведения типов не требуется. Если type2 это указатель на тип void, то в С приведение не нужно.

Ограничения присвоения также существуют относительно указателей разных размеров (near, far и huge). Можно присвоить меньший указатель большему, не вызвав ошибки, но нельзя выполнить обратную операцию, не выполнив явную операцию приведения. Например,

char near *ncp;

char far *fcp;

fcp = ncp; // допустимо

ncp = fcp; // недопустимо

ncp = (char near*)fcp; // теперь допустимо

Загрузка...