Co je void* v C a C++

Co Je Void V C A C



C a C++ jsou dva programovací jazyky, které hodně spoléhají na ukazatele pro správu paměti a manipulaci s daty. Ukazatele jsou proměnné, které ukládají adresy paměti, které umožňují programům přistupovat a manipulovat s daty uloženými v paměti. Jedním speciálním typem ukazatele je void ukazatel (void*) , také známý jako a generický ukazatel .

Co je ukazatel prázdnoty (void*)?

Ukazatel prázdnoty, také známý jako obecný ukazatel, je ukazatel, který není spojen s žádným konkrétním typem dat, takže je vhodný pro ukazování na jakýkoli typ dat. Jinými slovy, a prázdný ukazatel může ukazovat na celé číslo, znak, řetězec nebo jakýkoli jiný datový typ. Tato flexibilita dělá z ukazatelů void mocný nástroj v programování v C a C++.

Deklarace ukazatele neplatnosti v C a C++

V C a C++ je prázdný ukazatel je deklarován pomocí následující syntaxe:







prázdnota * ptr ;

Použití void ukazatelů v C a C++

Prázdné ukazatele v C se většinou používají, když datový typ proměnné není znám nebo se může za běhu měnit. Umožňují obecný způsob ukládání a manipulace s daty, aniž by bylo nutné znát jejich konkrétní datový typ. Je to užitečné zejména při práci s funkcemi nebo datovými strukturami, které mohou zpracovávat různé typy dat.



Jedno běžné použití neplatné ukazatele je ve funkcích alokace paměti jako např malloc() který vrací prázdný ukazatel na blok paměti, který lze použít k uložení libovolného datového typu. Programátor pak může přenést ukazatel prázdnoty na příslušný datový typ pro přístup a manipulaci s daty uloženými v přiděleném paměťovém bloku.



Další použití void ukazatelů v C je in ukazatele funkcí , což jsou proměnné, které ukládají paměťovou adresu funkce. Prázdné ukazatele lze použít k uložení adresy paměti libovolné funkce, bez ohledu na její návratový typ nebo seznam parametrů, což umožňuje větší flexibilitu při použití ukazatele funkcí.





Použití neplatné ukazatele v C++ je téměř podobný, lze je však také použít k vytvoření obecného rozhraní pro objekty různých tříd. Toho je často dosaženo použitím virtuálních funkcí, které umožňují jednotné zacházení s objekty různých tříd. C++ dále nabízí přísnější kontrolu typu než C, což znamená použití neplatné ukazatele nesprávně může mít za následek více chyb a chyb.

Body, které je třeba vzít v úvahu při používání ukazatelů na prázdnotu v C a C++

Zde je několik bodů, které byste měli při používání zvážit neplatné ukazatele v C a C++.



1: v C, prázdno* lze použít jako návratovou hodnotu a parametr funkce, ale v C++ musíte mít specifický datový typ ukazatele.

Například:

V C je kód uveden níže:

#include

#include

prázdnota * přidat_čísla ( int A , int b ) {

int * výsledek = malloc ( velikost ( int ) ) ;

* výsledek = A + b ;

vrátit se ( prázdnota * ) výsledek ;

}

prázdnota výsledek_tisku ( prázdnota * výsledek ) {

int * ptr = ( int * ) výsledek ;

printf ( 'Výsledek je: %d \n ' , * ptr ) ;

volný, uvolnit ( ptr ) ;

}

int hlavní ( ) {

int číslo1 = 5 , číslo2 = 7 ;

prázdnota * výsledek = přidat_čísla ( číslo1 , číslo2 ) ;

výsledek_tisku ( výsledek ) ;

vrátit se 0 ;

}

Výše uvedený kód definuje funkci add_numbers() která vrací a prázdno* ukazatel na výsledek sečtení dvou celých čísel předávaných jako argumenty. Funkce print_result() bere a void* ukazatel a vytiskne výsledek. Ve funkci main() zavoláme add_numbers() a předat výsledek void* ukazatel na print_result() pro tisk.

V C++ je vyžadován specifický datový typ.

#include

pomocí jmenného prostoru std ;

prázdnota printInt ( int * na jednom ) {

cout << 'Celé číslo je:' << * na jednom << endl ;

}

int hlavní ( ) {

int X = 10 ;

int * ptr = & X ;

printInt ( ptr ) ;

vrátit se 0 ;

}

2: V C můžete převést ukazatel void na jiný typ ukazatele prostřednictvím implicitní konverze. Ale v C++ musíte použít explicitní konverze převést na prázdný ukazatel na jakýkoli jiný typ ukazatele.

Zde je jednoduchý příklad kódu pro C i C++, který ilustruje rozdíl mezi implicitní a explicitní konverze z neplatné ukazatele na další typy ukazatelů:

V C se používá následující kód:

#include

prázdnota tiskChar ( prázdnota * ch ) {

char C = * ( char * ) ch ;

printf ( '%C \n ' , C ) ;

}

int hlavní ( ) {

char C = 'A' ;

prázdnota * ptr = & C ;

tiskChar ( ptr ) ;

vrátit se 0 ;

}

Výše uvedený kód definuje funkci tiskChar který jako parametr vezme ukazatel na prázdnotu a vytiskne znak uložený na tomto paměťovém místě. Ve funkci main proměnná char C je definován a jeho adresa je uložena v ukazateli void ptr. The tiskChar funkce je pak volána s prázdný ukazatel „ptr“ jako argument. Ukazatel void je explicitně převeden na ukazatel char v 'printChar' funkce pro přístup a tisk uložených hodnot 'C' .

V C++ je kód uveden níže:

#include

prázdnota printInt ( prázdnota * na jednom ) {

int * ptr = static_cast < int *> ( na jednom ) ;

std :: cout << * ptr << std :: endl ;

}

int hlavní ( ) {

int X = 10 ;

prázdnota * ptr = & X ;

printInt ( ptr ) ;

vrátit se 0 ;

}

Výše uvedený kód definuje funkci printInt který bere jako parametr void pointer num a přetypuje jej na celočíselný ukazatel pomocí operátor static_cast . Funkce pak vypíše hodnotu celého čísla, na které ukazuje přetypovaný ukazatel. Ve funkci main je definována celočíselná proměnná x a její adresa je uložena v a void pointer ptr, který je pak předán do printInt funkce. Výstupem programu je hodnota x, což je 10.

Závěrečné myšlenky

The prázdnota ukazatele v C a C++ poskytují účinný způsob, jak manipulovat s daty, aniž byste museli znát jejich konkrétní datový typ. Jsou užitečné pro alokaci paměti a ukazatele funkcí, stejně jako pro vytvoření obecného rozhraní pro objekty různých tříd v C++. Je však důležité vzít v úvahu rozdíly mezi C a C++ v jejich použití neplatné ukazatele , jako je potřeba specifických datových typů v C++ a potřeba explicitní konverze při přetypování void ukazatelů na jiné typy ukazatelů. Pečlivé zvážení těchto bodů může vést k efektivnějšímu a efektivnějšímu využití neplatné ukazatele v programování.