Mi érvénytelen* a C-ben és a C++-ban

Mi Ervenytelen A C Ben Es A C Ban



A C és a C++ két programozási nyelv, amelyek nagymértékben támaszkodnak mutatókra a memóriakezeléshez és az adatkezeléshez. A mutatók memóriacímeket tároló változók, amelyek lehetővé teszik a programok számára a memóriában tárolt adatok elérését és kezelését. A mutató egyik speciális típusa a üres mutató (void*) , más néven a általános mutató .

Mi az az ürességmutató (void*)?

Az üres mutató, más néven általános mutató, olyan mutató, amely nem kapcsolódik semmilyen konkrét adattípushoz, így alkalmas bármilyen típusú adatra mutatni. Más szóval, a üres mutató mutathat egész számra, karakterre, karakterláncra vagy bármilyen más adattípusra. Ez a rugalmasság hatékony eszközzé teszi az üres mutatókat a C és C++ programozásban.

Az érvénytelen mutató deklarációja C és C++ nyelven

C és C++ nyelven a üres mutató a következő szintaxissal van deklarálva:







üres * ptr ;

Void Pointerek használata C és C++ nyelven

Érvénytelen mutatók C-ben többnyire akkor használatosak, ha egy változó adattípusa nem ismert, vagy futás közben változhat. Lehetővé teszik az adatok tárolásának és kezelésének általános módját anélkül, hogy ismerni kellene az adott adattípust. Ez különösen akkor hasznos, ha olyan függvényekkel vagy adatstruktúrákkal foglalkozik, amelyek különböző típusú adatokat tudnak kezelni.



Egy általános használat üres mutatók memóriafoglalási funkciókban van, mint pl malloc() amely egy üres mutatópontot ad vissza egy memóriablokkhoz, amely bármilyen adattípus tárolására használható. A programozó ezután az üres mutatót a megfelelő adattípusra vetheti, hogy hozzáférjen és kezelje a lefoglalt memóriablokkban tárolt adatokat.



Az üres mutatók másik használata a C-ben függvénymutatók , amelyek egy függvény memóriacímét tárolják. Az üres mutatók bármilyen függvény memóriacímének tárolására használhatók, függetlenül a visszatérési típustól vagy a paraméterlistától, ami nagyobb rugalmasságot tesz lehetővé a függvénymutató használatában.





A ... haszna üres mutatók A C++-ban szinte hasonló, de használhatók általános interfész létrehozására is különböző osztályú objektumok számára. Ezt gyakran virtuális függvények használatával érik el, amelyek lehetővé teszik a különböző osztályokba tartozó objektumok egységes kezelését. Ezenkívül a C++ szigorúbb típusellenőrzést kínál, mint a C, ami azt jelenti, hogy használja üres mutatók helytelenül több hibát és hibát eredményezhet.

Figyelembe veendő pontok üres mutatók használatakor C és C++ nyelven

Íme néhány szempont, amelyet figyelembe kell vennie a használat során üres mutatók C-ben és C++-ban.



1: C-ben, üres* használható visszatérési értékként és függvényparaméterként, de a C++-ban rendelkeznie kell egy adott adattípusú mutatóval.

Például:

C-ben a kód a következő:

#include

#include

üres * add_numbers ( int a , int b ) {

int * eredmény = malloc ( mérete ( int ) ) ;

* eredmény = a + b ;

Visszatérés ( üres * ) eredmény ;

}

üres print_result ( üres * eredmény ) {

int * ptr = ( int * ) eredmény ;

printf ( 'Az eredmény: %d \n ' , * ptr ) ;

ingyenes ( ptr ) ;

}

int fő- ( ) {

int szám1 = 5 , szám2 = 7 ;

üres * eredmény = add_numbers ( szám1 , szám2 ) ;

print_result ( eredmény ) ;

Visszatérés 0 ;

}

A fenti kód egy függvényt határoz meg add_numbers() amely visszaadja a üres* mutató az argumentumként átadott két egész szám hozzáadásának eredményére. A funkció print_result() vesz a érvénytelen* mutató és kinyomtatja az eredményt. A main() függvényben meghívjuk add_numbers() és adja át az eredményt érvénytelen* mutató nak nek print_result() nyomtatáshoz.

A C++ nyelvben meghatározott adattípusra van szükség.

#include

névtér std használatával ;

üres printInt ( int * az egyiken ) {

cout << 'Az egész szám a következő: << * az egyiken << endl ;

}

int fő- ( ) {

int x = 10 ;

int * ptr = & x ;

printInt ( ptr ) ;

Visszatérés 0 ;

}

2: C nyelven az üres mutatót egy másik típusú mutatóvá alakíthatja át implicit konverzió. De C++-ban használnod kell a explicit konverzió átalakítani a üres mutató bármely más mutatótípushoz.

Íme egy egyszerű kódpélda a C és a C++ számára, hogy szemléltesse a különbséget a beleértett és explicit konverzió nak,-nek üres mutatók más típusú mutatókhoz:

C-ben a következő kódot használjuk:

#include

üres printChar ( üres * ch ) {

char c = * ( char * ) ch ;

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

}

int fő- ( ) {

char c = 'a' ;

üres * ptr = & c ;

printChar ( ptr ) ;

Visszatérés 0 ;

}

A fenti kód egy függvényt határoz meg printChar amely egy üres mutatót vesz paraméterként, és kiírja az azon a memóriahelyen tárolt karaktert. A fő függvényben egy char változó c definiálva van, és a címét egy üres mutatóban tárolja ptr. A printChar függvényt ezután a üres mutató 'ptr' érvként. Az üres mutatót kifejezetten char mutatóvá alakítja a 'printChar' funkció a tárolt érték eléréséhez és kinyomtatásához 'c' .

C++ nyelven a kód a következő:

#include

üres printInt ( üres * az egyiken ) {

int * ptr = static_cast < int *> ( az egyiken ) ;

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

}

int fő- ( ) {

int x = 10 ;

üres * ptr = & x ;

printInt ( ptr ) ;

Visszatérés 0 ;

}

A fenti kód egy függvényt határoz meg printInt amely paraméterként egy void pointer num értéket vesz fel, és egy egész mutatóba adja a segítségével static_cast operátor . A függvény ezután kiírja annak az egész számnak az értékét, amelyre az öntött mutató mutat. A főfüggvényben egy x egész változót definiálunk, és a címét az a-ban tároljuk üres mutató ptr, amelyet azután átadnak a printInt funkció. A program kimenete x értéke, ami 10.

Végső gondolatok

A üres A C és C++ mutatói hatékony módot biztosítanak az adatok manipulálására anélkül, hogy ismerni kellene az adott adattípust. Hasznosak memóriafoglaláshoz és függvénymutatókhoz, valamint általános interfész létrehozásához különböző osztályú objektumok számára C++ nyelven. Fontos azonban figyelembe venni a C és a C++ közötti különbségeket a használatukban üres mutatók , mint például bizonyos adattípusok szükségessége a C++ nyelven, és az explicit konverzió szükségessége üres mutatók más mutatótípusokra való öntésekor. Ezen pontok gondos mérlegelése hatékonyabb és eredményesebb felhasználást eredményezhet üres mutatók a programozásban.