Kaj je void* v C in C++

Kaj Je Void V C In C



C in C++ sta dva programska jezika, ki se močno zanašata na kazalce za upravljanje pomnilnika in obdelavo podatkov. Kazalci so spremenljivke, ki shranjujejo pomnilniške naslove, ki programom omogočajo dostop do podatkov, shranjenih v pomnilniku, in njihovo upravljanje. Posebna vrsta kazalca je kazalec praznine (praznina*) , znan tudi kot a generični kazalec .

Kaj je kazalec praznine (void*)?

Prazen kazalec, znan tudi kot generični kazalec, je kazalec, ki ni povezan z nobeno specifično vrsto podatkov, zaradi česar je primeren za kazanje na katero koli vrsto podatkov. Z drugimi besedami, a kazalec praznine lahko kaže na celo število, znak, niz ali katero koli drugo podatkovno vrsto. Zaradi te prilagodljivosti so void kazalci močno orodje pri programiranju C in C++.

Deklaracija kazalca praznine v C in C++

V C in C++ je kazalec praznine je deklariran z naslednjo sintakso:







praznina * ptr ;

Uporaba kazalcev praznine v C in C++

Kazalci praznine v C se večinoma uporabljajo, ko podatkovni tip spremenljivke ni znan ali se lahko spreminja med izvajanjem. Omogočajo splošen način shranjevanja in obdelave podatkov, ne da bi morali poznati njihov specifični tip podatkov. Koristno je zlasti pri delu s funkcijami ali podatkovnimi strukturami, ki lahko obravnavajo različne vrste podatkov.



Ena pogosta uporaba prazni kazalci je v funkcijah dodeljevanja pomnilnika, kot je npr malloc() ki vrne točko praznega kazalca v blok pomnilnika, ki se lahko uporablja za shranjevanje katere koli vrste podatkov. Programer lahko nato vrže kazalec praznine na ustrezen podatkovni tip za dostop in upravljanje podatkov, shranjenih v dodeljenem pomnilniškem bloku.



Druga uporaba kazalcev praznine v C je v funkcijski kazalci , ki so spremenljivke, ki shranjujejo pomnilniški naslov funkcije. Voidne kazalce je mogoče uporabiti za shranjevanje pomnilniškega naslova katere koli funkcije, ne glede na vrsto povratka ali seznam parametrov, kar omogoča večjo prilagodljivost pri uporabi funkcijskega kazalca.





Uporaba prazni kazalci v C++ je skoraj podoben, vendar jih je mogoče uporabiti tudi za ustvarjanje generičnega vmesnika za objekte različnih razredov. To se pogosto doseže z uporabo virtualnih funkcij, ki omogočajo enotno obravnavo predmetov različnih razredov. Poleg tega C++ ponuja strožje preverjanje tipa kot C, kar pomeni, da uporaba prazni kazalci nepravilno lahko povzroči več napak in hroščev.

Točke, ki jih je treba upoštevati pri uporabi kazalcev praznine v C in C++

Tukaj je nekaj točk, ki jih morate upoštevati pri uporabi prazni kazalci v C in C++.



1: V C, praznina* lahko uporabite kot povratno vrednost in funkcijski parameter, vendar morate v C++ imeti določen podatkovni tip kazalca.

Na primer:

V C je koda podana spodaj:

#include

#include

praznina * dodaj_števila ( int a , int b ) {

int * rezultat = malloc ( sizeof ( int ) ) ;

* rezultat = a + b ;

vrnitev ( praznina * ) rezultat ;

}

praznina izpis_rezultata ( praznina * rezultat ) {

int * ptr = ( int * ) rezultat ;

printf ( 'Rezultat je: %d \n ' , * ptr ) ;

prost ( ptr ) ;

}

int glavni ( ) {

int št.1 = 5 , št.2 = 7 ;

praznina * rezultat = dodaj_števila ( št.1 , št.2 ) ;

izpis_rezultata ( rezultat ) ;

vrnitev 0 ;

}

Zgornja koda definira funkcijo dodaj_števila() ki vrne a praznina* kazalec na rezultat seštevanja dveh celih števil, posredovanih kot argumenta. Funkcija print_result() vzame a praznina* kazalec in natisne rezultat. V funkciji main() kličemo dodaj_števila() in prenesite nastalo praznina* kazalec do print_result() za tisk.

V C++ je potreben poseben podatkovni tip.

#include

uporaba imenskega prostora std ;

praznina printInt ( int * na enem ) {

cout << 'Celo število je: ' << * na enem << konec ;

}

int glavni ( ) {

int x = 10 ;

int * ptr = & x ;

printInt ( ptr ) ;

vrnitev 0 ;

}

2: V C lahko kazalec praznine pretvorite v drugo vrsto kazalca implicitna pretvorba. Toda v C++ morate uporabiti eksplicitna pretvorba za pretvorbo kazalec praznine na katero koli drugo vrsto kazalca.

Tukaj je preprost primer kode za C in C++ za ponazoritev razlike med implicitno in eksplicitna pretvorba od prazni kazalci na druge vrste kazalcev:

V C se uporablja naslednja koda:

#include

praznina printChar ( praznina * pogl ) {

char c = * ( char * ) pogl ;

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

}

int glavni ( ) {

char c = 'a' ;

praznina * ptr = & c ;

printChar ( ptr ) ;

vrnitev 0 ;

}

Zgornja koda definira funkcijo printChar ki vzame kazalec praznine kot parameter in natisne znak, shranjen na tej pomnilniški lokaciji. V glavni funkciji spremenljivka char c je definiran in njegov naslov je shranjen v praznem kazalcu ptr. The printChar funkcija se nato pokliče z prazen kazalec 'ptr' kot argument. Kazalec void je eksplicitno pretvorjen v kazalec char v »printChar« funkcijo za dostop in tiskanje vrednosti, shranjene v 'c' .

V C++ je koda podana spodaj:

#include

praznina printInt ( praznina * na enem ) {

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

std :: cout << * ptr << std :: konec ;

}

int glavni ( ) {

int x = 10 ;

praznina * ptr = & x ;

printInt ( ptr ) ;

vrnitev 0 ;

}

Zgornja koda definira funkcijo printInt ki vzame void pointer num kot parameter in ga pretvori v celoštevilski kazalec z uporabo static_cast operator . Funkcija nato natisne vrednost celega števila, na katero kaže pretvorjeni kazalec. V glavni funkciji je definirana celoštevilska spremenljivka x in njen naslov shranjen v a void kazalec ptr, ki se nato prenese na printInt funkcijo. Rezultat programa je vrednost x, ki je 10.

Končne misli

The praznina kazalci v C in C++ zagotavljajo zmogljiv način za manipulacijo podatkov, ne da bi morali poznati njihov specifični podatkovni tip. Uporabni so za dodeljevanje pomnilnika in funkcijske kazalce, pa tudi za ustvarjanje generičnega vmesnika za objekte različnih razredov v C++. Vendar je pomembno upoštevati razlike med C in C++ pri njuni uporabi prazni kazalci , kot je potreba po posebnih tipih podatkov v C++ in potreba po eksplicitni pretvorbi pri predvajanju praznih kazalcev v druge tipe kazalcev. Skrbno upoštevanje teh točk lahko vodi do učinkovitejše in uspešnejše uporabe prazni kazalci v programiranju.