Massiivi ja osuti erinevus

Autor: Laura McKinney
Loomise Kuupäev: 1 Aprill 2021
Värskenduse Kuupäev: 17 Mai 2024
Anonim
REMONT MILLISED MITTE LÄHEB ÜKSIKASJALIK KEEGI  Garant-remont. Viimistlus töö aastal Brest
Videot: REMONT MILLISED MITTE LÄHEB ÜKSIKASJALIK KEEGI Garant-remont. Viimistlus töö aastal Brest

Sisu


Massiivi ja osuti vahel on tihe seos. Kursorit saab kasutada massiivi elementide juurde pääsemiseks, kui osuti aritmeetika abil pääseb juurde tervele massiivile, muudab juurdepääsu kiiremaks. Osuti ja massiivi vahel on põhiline erinevus, st massiiv on sarnase andmetüübi muutujate kogum, samas kui osuti on muutuja, mis salvestab mõne muu muutuja aadressi. Massiivi ja osuti vahel on ka mõned muud erinevused, mida arutatakse allpool võrdlustabelis.

  1. Võrdlusdiagramm
  2. Definitsioon
  3. Peamised erinevused
  4. Järeldus

Võrdlusdiagramm

Võrdluse alusMassiivPointer
Deklaratsioon// C ++
kirjuta var_name;
// Java.
kirjuta var-name;
var_name = uus tüüp;
// C ++
tüüp * var_name;
TöötamineSalvestab homogeense andmetüübi muutuja väärtuse.Salvestage osuti muutujate andmetüübiga sama andmetüübi teise muutuja aadress.
PõlvkondVõib genereerida osutite massiivi.Massiivi osuti saab genereerida.
Java tugiToetage massiivi kontseptsiooni.Ei toeta viiteid.
LadustamineTavaline massiiv salvestab muutujate väärtused ja osuti massiiv salvestab muutujate aadressid.Osutid on spetsiaalselt loodud muutujate aadresside salvestamiseks.
MahtMassiiv võib talletada elementide arvu, mida mainitakse massiivi muutuja suuruses. Kursormuutuja võib korraga salvestada ainult ühe muutuja aadressi.


Massiivi määratlus

Massiiv on sama andmetüübi elementide kogum ja kõiki neid elemente tähistatakse üldnimega, mis on massiivi muutuja nimi. Konkreetsele massiivi elemendile pääsete juurde, kui pääsete juurde selle massiivi spetsiifilisele indeksile, kus see element on salvestatud. Massiivid võivad olla ühemõõtmeline, kahemõõtmeline või mitmemõõtmeline massiiv. Samuti saab genereerida viidete massiivi, st massiivi, mis sisaldab kõiki muutujaid osutimuutujana. 'C ++' korral on massiivid staatiliselt eraldatud, 'Java' korral aga massiivid dünaamiliselt.

// Tüüpi C ++ kirjutage var_name; // Java. kirjuta var-name; var_name = uus tüüp;

Siin "tüüp" tähistab massiivi muutuja andmetüüpi, "var_name" tähistab massiivi muutujale antud nime, "suurus" tähistab massiivi muutuja mahtu, st mitu "tüüpi" elementi saab sellesse massiivi muutujasse salvestada. . Massiivile juurdepääsu saamiseks on kaks meetodit: esimene 'osuti aritmeetika' ja teine ​​'massiivi indekseerimine', millest 'osuti aritmeetiline' on kiirem.


// ligipääs osuti aritmeetika abil Void display_array (int * S) {while (* s) {cout (<< "value is" << * s); * s ++; }}

„Kursori aritmeetika” kasutamine toimiks kiiremini kui „massiivi indekseerimine”, st massiivi muutujale juurdepääsuks selle indeksi abil. Kui teil on vaja funktsioonile suunata osutite massiiv, saab seda teha sama meetodiga, mida kasutate tavalise massiivi edastamiseks, st kutsuda funktsioon otse massiivi nimega, ilma indeksita.

Mõistagem seda näitega

// Osutite massiivi deklareerimine. int * p;

Siin näitab see, et p on täisarvutüüpi massiiv, see hoiab 10 täisarvu tüüpi muutuja aadressi. Liigutame ülaltoodud osuti massiivi funktsiooninäidikule ().

kuva (p); // Funktsiooni kuvale helistamine. tühine kuva (int * d) {// Osuti massiivi taastav funktsioon. jaoks (int i = 0; i <10; i ++) {cout << ("indeks" <

See funktsioon kuvab muutujates sisalduvaid väärtusi, mille aadressid sellele osuti massiivile järjestikku salvestatakse.

Osuti määratlus

Kursor on muutuja, mis hoiab teise muutuja mäluaadressi. Mõlema, kursori muutuja ja muutuja, mille aadressile osutatakse kursori muutuja, andmetüüp peab olema sama. Kursori muutuja deklareeritakse järgmiselt.

// Deklaratsioon C ++ tüüpi * nimes;

Siin on andmetüüp 'tüüp', osuti muutuja nimi on 'nimi'. Tüüp määratleb, millist muutuja aadressi osuti muutujasse saab salvestada. Näiteks täisarvu osuti salvestab täisarvu muutuja aadressi. Seal on kaks kursori operaatorit '*' ja '&'. Operaator '*' tagastab aadressil asuva väärtuse, mis salvestatakse muutujasse, millele järgneb märk *. Operaator "&" tagastab muutuja aadressi, millele järgneb märk "&".

// näiteks int b = 10 int a = & b; // Siin salvestatakse b aadress muutujasse a. // laseb, et b aadress on 2000, seega a = 2000. int c = * a; // Siin tagastab täisarvuline muutuja * a väärtuse, mis asub .ie-s salvestatud aadressil. c = 10.

Seal on ainult kaks aritmeetilist operaatorit, mida saate osutites kasutada, st liitmist ja lahutamist. Kui rakendate täisarvulise osuti muutuja juurdekasvu, suurendatakse seda andmetüübi suurusega, st 2 baiti, kuna see on täisarvuline osuti, siis juurdekasvu korral peab see osutama järgmisele täisarvu muutujale. Sama on ka vähendamisega.

// p on täisarvuline osuti, mille väärtus on 2000. p ++; // nüüd p = 2002. p--; // sisaldab nüüd jälle p 2000, vähendatuna kahe baiti võrra.

  1. Massiiv salvestab sarnaste andmetüüpide muutujaid ja muutujate andmetüübid peavad vastama massiivi tüübile. Teisest küljest salvestab osuti muutuja selle muutuja aadressi, mis sarnaneb osuti muutuja tüübiga.
  2. Saame genereerida osterite massiivi, st massiivi, mille muutujad on osuti muutujad. Teisest küljest saame luua osuti, mis osutab massiivile.
  3. Java toetab massiivi, kuid see ei toeta viiteid.
  4. Massiivi suurus otsustab muutujate arvu, mida see saab salvestada; osutimuutuja saab salvestada ainult muutuja aadressi

Märge:

Java ei toeta ega viita rangelt kursoritele.

Järeldus:

Kui peame töötama sarnaste andmetüüpide andmeelementidega, saame muutujate eraldi töötamise asemel luua samalaadsete andmetüüpide muutujate massiivi ja seejärel sellega töötada. Mõne programmi jaoks on osutid vajalikud, see annab tohutult jõudu, kuid kui osuti sisaldab valet väärtust, on seda kõige raskem leida.