Mikä on mitätön* C:ssä ja C++:ssa

Mika On Mitaton C Ssa Ja C Ssa



C ja C++ ovat kaksi ohjelmointikieltä, jotka ovat vahvasti riippuvaisia ​​osoittimista muistin hallinnassa ja tietojen käsittelyssä. Osoittimet ovat muuttujia, jotka tallentavat muistiosoitteita, joiden avulla ohjelmat voivat käyttää ja käsitellä muistiin tallennettuja tietoja. Yksi erikoistyyppinen osoitin on tyhjä osoitin (tyhjä*) , joka tunnetaan myös nimellä a yleinen osoitin .

Mikä on tyhjä osoitin (tyhjä*)?

Tyhjä osoitin, joka tunnetaan myös nimellä yleinen osoitin, on osoitin, joka ei liity mihinkään tiettyyn tietotyyppiin, joten se soveltuu osoittamaan kaikentyyppisiä tietoja. Toisin sanoen a tyhjä osoitin voi osoittaa kokonaislukua, merkkiä, merkkijonoa tai mitä tahansa muuta tietotyyppiä. Tämä joustavuus tekee tyhjistä osoittimista tehokkaan työkalun C- ja C++-ohjelmoinnissa.

Ilmoitus mitättömästä osoittimesta C- ja C++-kielissä

C:ssä ja C++:ssa tyhjä osoitin ilmoitetaan seuraavan syntaksin kautta:







mitätön * ptr ;

Void Pointersin käyttö C- ja C++-kielissä

Tyhjät osoittimet C:ssä käytetään useimmiten silloin, kun muuttujan tietotyyppiä ei tunneta tai se voi vaihdella ajon aikana. Ne mahdollistavat yleisen tavan tallentaa ja käsitellä tietoja ilman, että tarvitsee tietää sen erityistä tietotyyppiä. Se on hyödyllinen erityisesti silloin, kun käsitellään toimintoja tai tietorakenteita, jotka voivat käsitellä erityyppisiä tietoja.



Yksi yleinen käyttö tyhjiä osoittimia on muistinvaraustoiminnoissa, kuten malloc() joka palauttaa tyhjän osoitinpisteen muistilohkoon, jota voidaan käyttää minkä tahansa tietotyypin tallentamiseen. Ohjelmoija voi sitten heittää tyhjän osoittimen sopivaan tietotyyppiin päästäkseen ja manipuloidakseen varattuun muistilohkoon tallennettuja tietoja.



Toinen tyhjien osoittimien käyttö C:ssä on käytössä toimintoosoittimet , jotka ovat muuttujia, jotka tallentavat funktion muistiosoitteen. Void-osoittimia voidaan käyttää minkä tahansa funktion muistiosoitteen tallentamiseen sen palautustyypistä tai parametriluettelosta riippumatta, mikä mahdollistaa funktioosoittimen käytön joustavuuden.





Käyttö tyhjiä osoittimia C++:ssa on melkein samanlainen, mutta niitä voidaan käyttää myös yleisen käyttöliittymän luomiseen eri luokkiin kuuluville objekteille. Tämä saavutetaan usein käyttämällä virtuaalisia toimintoja, jotka mahdollistavat eri luokkien objektien yhtenäisen käsittelyn. Lisäksi C++ tarjoaa tiukemman tyyppitarkistuksen kuin C, mikä tarkoittaa, että käytetään tyhjiä osoittimia väärin voi aiheuttaa enemmän virheitä ja bugeja.

Huomioitavaa, kun käytät tyhjiä osoittimia C:ssä ja C++:ssa

Tässä on muutamia kohtia, jotka sinun tulee ottaa huomioon käytön aikana tyhjiä osoittimia C:ssä ja C++:ssa.



1: C:ssä tyhjä* voidaan käyttää palautusarvona ja funktioparametrina, mutta C++:ssa sinulla on oltava tietyntyyppinen osoitin.

Esimerkiksi:

C:ssä koodi annetaan alla:

#include

#include

mitätön * add_numbers ( int a , int b ) {

int * tulos = malloc ( koko ( int ) ) ;

* tulos = a + b ;

palata ( mitätön * ) tulos ;

}

mitätön print_result ( mitätön * tulos ) {

int * ptr = ( int * ) tulos ;

printf ( 'Tulos on: %d \n ' , * ptr ) ;

vapaa ( ptr ) ;

}

int pää ( ) {

int numero1 = 5 , numero2 = 7 ;

mitätön * tulos = add_numbers ( numero1 , numero2 ) ;

print_result ( tulos ) ;

palata 0 ;

}

Yllä oleva koodi määrittelee toiminnon add_numbers() joka palauttaa a tyhjä* osoitin kahden argumenteina välitetyn kokonaisluvun lisäämisen tulokseen. Toiminto print_result() ottaa a tyhjä* osoitin ja tulostaa tuloksen. Main()-funktiossa kutsumme add_numbers() ja välitä tuloksena oleva tyhjä* osoitin to print_result() tulostamista varten.

C++:ssa vaaditaan tietty tietotyyppi.

#include

käyttäen nimiavaruutta std ;

mitätön printInt ( int * yhdellä ) {

cout << 'Kokonaisluku on:' << * yhdellä << endl ;

}

int pää ( ) {

int x = 10 ;

int * ptr = & x ;

printInt ( ptr ) ;

palata 0 ;

}

2: C:ssä voit muuntaa tyhjän osoittimen toiseen osoitintyyppiin implisiittinen muuntaminen. Mutta C++:ssa sinun on käytettävä eksplisiittinen muunnos muuntaa tyhjä osoitin mihin tahansa muuhun osoitintyyppiin.

Tässä on yksinkertainen koodiesimerkki sekä C:lle että C++:lle havainnollistamaan eroa niiden välillä implisiittinen ja eksplisiittinen muunnos / tyhjiä osoittimia muihin osoitintyyppeihin:

C:ssä käytetään seuraavaa koodia:

#include

mitätön printChar ( mitätön * ch ) {

hiiltyä c = * ( hiiltyä * ) ch ;

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

}

int pää ( ) {

hiiltyä c = 'a' ;

mitätön * ptr = & c ;

printChar ( ptr ) ;

palata 0 ;

}

Yllä oleva koodi määrittelee toiminnon printChar joka ottaa tyhjän osoittimen parametriksi ja tulostaa kyseiseen muistipaikkaan tallennetun merkin. Pääfunktiossa char-muuttuja c on määritelty ja sen osoite tallennetaan tyhjään osoittimeen ptr. The printChar funktiota kutsutaan sitten komennolla tyhjä osoitin 'ptr' argumenttina. Void-osoitin muunnetaan eksplisiittisesti char-osoittimeksi 'printChar' toiminto, jolla voit käyttää ja tulostaa tallennettua arvoa 'c' .

C++:ssa koodi annetaan alla:

#include

mitätön printInt ( mitätön * yhdellä ) {

int * ptr = static_cast < int *> ( yhdellä ) ;

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

}

int pää ( ) {

int x = 10 ;

mitätön * ptr = & x ;

printInt ( ptr ) ;

palata 0 ;

}

Yllä oleva koodi määrittelee toiminnon printInt joka ottaa void pointer num -arvon parametriksi ja heittää sen kokonaislukuosoittimeen käyttämällä static_cast-operaattori . Funktio tulostaa sitten heitetyn osoittimen osoittaman kokonaisluvun arvon. Pääfunktiossa määritellään kokonaislukumuuttuja x ja sen osoite tallennetaan kohtaan a tyhjä osoitin ptr, joka sitten välitetään printInt toiminto. Ohjelman tulos on x:n arvo, joka on 10.

Lopulliset ajatukset

The mitätön C- ja C++-osoittimet tarjoavat tehokkaan tavan käsitellä tietoja ilman, että sinun tarvitsee tietää sen tiettyä tietotyyppiä. Ne ovat hyödyllisiä muistin varaamiseen ja toimintoosoittimiin sekä yleisen käyttöliittymän luomiseen eri luokkien objekteille C++:ssa. On kuitenkin tärkeää ottaa huomioon erot C:n ja C++:n välillä niiden käytössä tyhjiä osoittimia , kuten tiettyjen tietotyyppien tarve C++:ssa ja tarve muuntamiseen, kun tyhjiä osoittimia lähetetään muihin osoitintyyppeihin. Näiden seikkojen huolellinen harkinta voi johtaa tehokkaampaan ja tehokkaampaan käyttöön tyhjiä osoittimia ohjelmoinnissa.