C ++ Pointer to void (z przykładami)

W tym samouczku nauczymy się o wskaźnikach pustki i jak ich używać, korzystając z przykładów.

Zanim przejdziesz do tego samouczka, sprawdź wskaźniki C ++.

W C ++ nie możemy przypisać adresu zmiennej o jednym typie danych do wskaźnika innego typu danych. Rozważmy ten przykład:

 // 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;

Tutaj błąd wystąpił, ponieważ adres jest doublezmienną typu. Jednak wskaźnik jest inttypu.

W takich sytuacjach możemy użyć wskaźnika do void (void pointers) w C ++. Na przykład,

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

Wskaźnik void to ogólny wskaźnik używany, gdy nie znamy typu danych zmiennej, na którą wskazuje wskaźnik.

Przykład 1: C ++ Void Pointer

 #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; )

Wynik

 0xffd117ac 0xffd117ac

Tutaj wskaźnik ptrma wartość &f.

Wynik pokazuje, że void pointer ptr przechowuje adres floatzmiennej f.

Ponieważ voidjest to typ pusty, nie można wyłuskiwać wskaźników 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

Przykład 2: Drukowanie zawartości Void Pointer

Aby wydrukować zawartość wskaźnika void, używamy static_castoperatora. Konwertuje wskaźnik z void*typu na odpowiedni typ danych adresu, który przechowuje wskaźnik:

 #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; )

Wynik

 Zawartość wskaźnika to 2.3

Ten program wypisuje wartość adresu wskazywanego przez voidwskaźnik ptr.

Ponieważ nie możemy wyłuskać voidwskaźnika, nie możemy użyć *ptr.

Jeśli jednak przekonwertujemy void*typ wskaźnika na float*typ, możemy użyć wartości wskazywanej przez voidwskaźnik.

W tym przykładzie użyliśmy static_castoperatora do konwersji typu danych wskaźnika z void*na float*.

Odlew w stylu C.

Możemy również użyć rzutowania w stylu C, aby wydrukować wartość.

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

Jednak static_castjest preferowany od odlewania typu C.

Uwaga: wskaźników void nie można używać do przechowywania adresów zmiennych z kwalifikatorami constlub volatile.

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

Interesujące artykuły...