Čo je neplatné* v C a C++

Co Je Neplatne V C A C



C a C++ sú dva programovacie jazyky, ktoré sa vo veľkej miere spoliehajú na ukazovatele na správu pamäte a manipuláciu s údajmi. Ukazovatele sú premenné, ktoré ukladajú adresy pamäte a umožňujú programom pristupovať k údajom uloženým v pamäti a manipulovať s nimi. Jedným špeciálnym typom ukazovateľa je void ukazovateľ (void*) , tiež známy ako a generický ukazovateľ .

Čo je ukazovateľ prázdnoty (void*)?

Ukazovateľ neplatnosti, známy aj ako všeobecný ukazovateľ, je ukazovateľ, ktorý nie je spojený so žiadnym konkrétnym typom údajov, vďaka čomu je vhodný na ukazovanie na akýkoľvek typ údajov. Inými slovami, a neplatný ukazovateľ môže ukazovať na celé číslo, znak, reťazec alebo akýkoľvek iný dátový typ. Táto flexibilita robí z ukazovateľov void mocný nástroj v programovaní v C a C++.

Vyhlásenie ukazovateľa neplatnosti v C a C++

V C a C++ je neplatný ukazovateľ je deklarovaný pomocou nasledujúcej syntaxe:







neplatné * ptr ;

Použitie ukazovateľov neplatnosti v C a C++

Neplatné ukazovatele v jazyku C sa väčšinou používajú, keď typ údajov premennej nie je známy alebo sa môže počas behu meniť. Umožňujú všeobecný spôsob ukladania a manipulácie s údajmi bez potreby poznať ich špecifický typ údajov. Je to užitočné najmä pri práci s funkciami alebo dátovými štruktúrami, ktoré dokážu spracovať rôzne typy dát.



Jedno bežné použitie neplatné ukazovatele je vo funkciách alokácie pamäte ako napr malloc() ktorý vracia bod neplatného ukazovateľa na blok pamäte, ktorý možno použiť na uloženie ľubovoľného typu údajov. Programátor potom môže preniesť ukazovateľ neplatnosti na príslušný typ údajov, aby mohol pristupovať k údajom uloženým v pridelenom pamäťovom bloku a manipulovať s nimi.



Ďalšie použitie void pointerov v C je v ukazovatele funkcií , čo sú premenné, ktoré uchovávajú pamäťovú adresu funkcie. Ukazovatele neplatnosti možno použiť na uloženie adresy pamäte ľubovoľnej funkcie bez ohľadu na jej návratový typ alebo zoznam parametrov, čo umožňuje väčšiu flexibilitu pri používaní ukazovateľa funkcie.





Použitie neplatné ukazovatele v C++ je takmer podobný, možno ich však použiť aj na vytvorenie všeobecného rozhrania pre objekty rôznych tried. To sa často dosahuje pomocou virtuálnych funkcií, ktoré umožňujú jednotné zaobchádzanie s objektmi rôznych tried. Ďalej C++ ponúka prísnejšiu kontrolu typu ako C, čo znamená, že použitie neplatné ukazovatele nesprávne môže spôsobiť viac chýb a chýb.

Body, ktoré je potrebné zvážiť pri používaní ukazovateľov neplatnosti v C a C++

Tu je niekoľko bodov, ktoré by ste mali zvážiť pri používaní neplatné ukazovatele v C a C++.



1: V C, prázdno* možno použiť ako návratovú hodnotu a parameter funkcie, ale v C++ musíte mať špecifický dátový typ ukazovateľa.

Napríklad:

V C je kód uvedený nižšie:

#include

#include

neplatné * pridať_čísla ( int a , int b ) {

int * výsledok = malloc ( veľkosť ( int ) ) ;

* výsledok = a + b ;

vrátiť ( neplatné * ) výsledok ;

}

neplatné výsledok_tlače ( neplatné * výsledok ) {

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

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

zadarmo ( ptr ) ;

}

int Hlavná ( ) {

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

neplatné * výsledok = pridať_čísla ( číslo1 , číslo2 ) ;

výsledok_tlače ( výsledok ) ;

vrátiť 0 ;

}

Vyššie uvedený kód definuje funkciu pridať_čísla() ktorý vracia a prázdno* ukazovateľ na výsledok sčítania dvoch celých čísel odovzdaných ako argumenty. Funkcia print_result() trvá a void* ukazovateľ a vytlačí výsledok. Vo funkcii main() voláme pridať_čísla() a odovzdajte výsledok void* ukazovateľ do print_result() na tlač.

V C++ je potrebný špecifický dátový typ.

#include

pomocou menného priestoru std ;

neplatné printInt ( int * na jeden ) {

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

}

int Hlavná ( ) {

int X = 10 ;

int * ptr = & X ;

printInt ( ptr ) ;

vrátiť 0 ;

}

2: V jazyku C môžete previesť ukazovateľ void na iný typ ukazovateľa implicitná konverzia. Ale v C++ musíte použiť explicitná konverzia previesť neplatný ukazovateľ na akýkoľvek iný typ ukazovateľa.

Tu je jednoduchý príklad kódu pre C aj C++ na ilustráciu rozdielu medzi implicitne a explicitná konverzia z neplatné ukazovatele na iné typy ukazovateľov:

V C sa používa nasledujúci kód:

#include

neplatné printChar ( neplatné * ch ) {

char c = * ( char * ) ch ;

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

}

int Hlavná ( ) {

char c = 'a' ;

neplatné * ptr = & c ;

printChar ( ptr ) ;

vrátiť 0 ;

}

Vyššie uvedený kód definuje funkciu printChar ktorý berie ukazovateľ neplatnosti ako parameter a vytlačí znak uložený na tomto pamäťovom mieste. V hlavnej funkcii premenná char c je definovaný a jeho adresa je uložená v ukazovateli neplatnosti ptr. The printChar funkcia sa potom volá s neplatný ukazovateľ „ptr“ ako argument. Ukazovateľ neplatnosti sa explicitne skonvertuje na ukazovateľ char v 'printChar' funkcia na prístup a vytlačenie hodnoty uloženej v 'c' .

V C++ je kód uvedený nižšie:

#include

neplatné printInt ( neplatné * na jeden ) {

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

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

}

int Hlavná ( ) {

int X = 10 ;

neplatné * ptr = & X ;

printInt ( ptr ) ;

vrátiť 0 ;

}

Vyššie uvedený kód definuje funkciu printInt ktorý berie ako parameter void pointer num a prenáša ho na celočíselný ukazovateľ pomocou operátor static_cast . Funkcia potom vypíše hodnotu celého čísla, na ktoré ukazuje prenesený ukazovateľ. Vo funkcii main je definovaná celočíselná premenná x a jej adresa je uložená v a void pointer ptr, ktorý je potom odovzdaný do printInt funkciu. Výstupom programu je hodnota x, čo je 10.

Záverečné myšlienky

The neplatné ukazovatele v C a C++ poskytujú výkonný spôsob manipulácie s údajmi bez toho, aby ste museli poznať ich špecifický typ údajov. Sú užitočné pre alokáciu pamäte a funkčné ukazovatele, ako aj pre vytváranie generického rozhrania pre objekty rôznych tried v C++. Je však dôležité zvážiť rozdiely medzi C a C++ v ich používaní neplatné ukazovatele , ako je potreba špecifických dátových typov v C++ a potreba explicitnej konverzie pri pretypovaní void ukazovateľov na iné typy ukazovateľov. Starostlivé zváženie týchto bodov môže viesť k efektívnejšiemu a efektívnejšiemu využívaniu neplatné ukazovatele v programovaní.