Указатель C ++ на недействительность (с примерами)

В этом руководстве мы узнаем об указателях void и о том, как их использовать, с помощью примеров.

Прежде чем продолжить изучение этого руководства, обязательно проверьте указатели C ++.

В C ++ мы не можем присвоить адрес переменной одного типа данных указателю другого типа данных. Рассмотрим этот пример:

 // pointer is of int type int *ptr; // variable is of double type double d = 9.0; // Error // can't assign double* to int* ptr = &d;

Здесь ошибка возникла из-за того, что адрес является doubleпеременной типа. Однако указатель имеет intтип.

В таких ситуациях мы можем использовать указатель на void ( указатели на void) в C ++. Например,

 // void pointer void *ptr; double d = 9.0; // valid code ptr = &d;

Недействительным указатель представляет собой общий указатель , который используется , когда мы не знаем , тип данных переменной , которая указывает указатель на.

Пример 1: указатель на пустоту в C ++

 #include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void ptr = &f; cout << &f << endl; cout << ptr << endl; return 0; )

Вывод

 0xffd117ac 0xffd117ac

Здесь указателю ptrприсваивается значение &f.

Выходные данные показывают, что указатель void ptr хранит адрес floatпеременной f.

Как voidи пустой тип, указатели void не могут быть разыменованы.

 void* ptr; float* fptr; float f = 2.3; // assign float address to void pointer ptr = &f; cout << *ptr << endl; // Error // assign float address to float pointer fptr = &f; cout << *fptr << endl; // Valid

Пример 2: Печать содержимого указателя пустоты

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

 #include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void pointer ptr = &f; cout << "The content of pointer is "; // use type casting to print pointer content cout << *(static_cast(ptr)); return 0; )

Вывод

 Содержание указателя 2.3.

Эта программа печатает значение адреса, на который указывает voidуказатель ptr.

Поскольку мы не можем разыменовать voidуказатель, мы не можем использовать *ptr.

Однако, если мы преобразуем void*тип указателя в float*тип, мы можем использовать значение, на которое указывает voidуказатель.

В этом примере мы использовали static_castоператор для преобразования типа данных указателя из void*в float*.

C-стиль кастинг

Мы также можем использовать приведение в стиле C для печати значения.

 // valid cout << *((float*)ptr);

Однако static_castпредпочтение отдается литью в стиле C.

Примечание: указатели void не могут использоваться для хранения адресов переменных с квалификаторами constили volatile.

 void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;

Интересные статьи...