Язык программирования C++

сайт центра лазерной медицины          

Бестиповый указатель


Особым случаем указателей является бестиповый указатель. Ключевое слово void используется для того, чтобы показать, что указатель означает просто адрес памяти, независимо от типа величины, находящейся по этому адресу:

void* ptr;

Для указателя на тип void не определена операция -, не определена операция обращения по адресу   *, не определена адресная арифметика. Использование бестиповых указателей ограничено работой с памятью при использовании ряда системных функций, передачей адресов в функции, написанные на языках программирования более низкого уровня, например на ассемблере.

В программе на языке Си++ бестиповый указатель может применяться там, где адрес интерпретируется по-разному, в зависимости от каких-либо динамически вычисляемых условий. Например, приведенная ниже функция будет печатать целое число, содержащееся в одном, двух или четырех байтах, расположенных по передаваемому адресу:

void printbytes(void* ptr, int nbytes) { if (nbytes == 1) { char* cptr = (char*)ptr; cout *cptr; } else if (nbytes == 2) { short* sptr = (short*)ptr; cout *sptr; } else if (nbytes == 4) { long* lptr = (long*)ptr; cout *lptr; } else { cout "Неверное значение аргумента"; } }

В примере используется операция явного преобразования типа. Имя типа, заключенное в круглые скобки, стоящее перед выражением, преобразует значение этого выражения к указанному типу. Разумеется, эта операция может применяться к любым указателям.



Содержание раздела