Rozdiel medzi poľom a ukazovateľom
Obsah
Medzi poľom a ukazovateľom existuje úzka väzba. Ukazovateľ môže byť použitý na prístup k prvkom poľa, prístup do celého poľa pomocou aritmetiky ukazovateľa uľahčuje prístup. Medzi ukazovateľom a poľom je základný rozdiel, tj je kolekciou premenných podobného typu údajov, zatiaľ čo ukazovateľ je premenná, ktorá ukladá adresu inej premennej. Medzi poľom a ukazovateľom sú niektoré ďalšie rozdiely, ktoré sú uvedené nižšie v porovnávacej tabuľke.
- Porovnávacia tabuľka
- definícia
- Kľúčové rozdiely
- záver
Porovnávacia tabuľka
Základ pre porovnanie | rad | ukazovateľ |
---|---|---|
vyhlásenie | // V C ++ zadajte var_name; // V Jave. typ var-name; var_name = nový typ; | // V C ++ napíšte * var_name; |
pracovné | Uloží hodnotu premennej homogénneho dátového typu. | Uložte adresu inej premennej rovnakého dátového typu ako ukazovateľ premenných dátového typu. |
generácie | Môže sa vygenerovať pole ukazovateľov. | Môže sa vygenerovať ukazovateľ na pole. |
Podpora Java | Podporovať koncepciu súboru. | Nepodporuje ukazovatele. |
skladovanie | Normálne pole ukladá hodnoty premennej a ukazovacie pole ukladá adresu premenných. | Ukazovatele sú špeciálne navrhnuté na ukladanie adresy premenných. |
kapacita | Pole môže uchovávať počet prvkov uvedených vo veľkosti premennej poľa. | Ukazovateľ ukazovateľa môže naraz ukladať adresu iba jednej premennej. |
Definícia poľa
Pole je kolekcia prvkov toho istého dátového typu a všetky tieto prvky sa označujú spoločným názvom, ktorým je názov premennej poľa. Prístup ku konkrétnemu prvku poľa je možný prostredníctvom prístupu k špecifickému indexu tohto poľa, v ktorom je tento prvok uložený. Pole môže byť jednorozmerné pole, dvojrozmerné pole alebo viacrozmerné pole. Môže sa tiež vygenerovať pole ukazovateľov, t.j. pole obsahujúce všetky premenné ako ukazovatele. V „C ++“ sú polia staticky alokované, zatiaľ čo v „Java“ sú polia dynamicky alokované.
// V C ++ napíšte var_name; // V Jave. typ var-name; var_name = nový typ;
„Typ“ tu označuje dátový typ premennej poľa, „var_name“ označuje názov daný premennej poľa, „veľkosť“ označuje kapacitu premennej poľa, tj koľko prvkov „typu“ sa môže uložiť do tejto premennej poľa , Existujú dva spôsoby prístupu k poľu, prvý „aritmetický ukazovateľ“ a druhý „indexovanie“, z ktorých „aritmetický ukazovateľ“ je rýchlejší.
// prístup pomocou aritmetického ukazovateľa Void display_array (int * S) {while (* s) {cout (<< "hodnota je" << * s); * S ++; }}
Použitie „aritmetiky ukazovateľa“ by fungovalo rýchlejšie v porovnaní s „indexovaním polí“, t. J. Prístup k premennej poľa pomocou jeho indexu. Ak potrebujete do funkcie preniesť pole ukazovateľov, dá sa to urobiť pomocou rovnakej metódy, ktorú používate na odovzdanie normálneho poľa, t. J. Priamo zavolať funkciu s názvom poľa bez indexu.
Pochopme to príkladom
// Vyhlásenie poľa ukazovateľov. int * p;
Tu ukazuje, že „p“ je pole typu celočíselného typu, bude držať adresu 10 premenných typu celočíselného typu. Poďme vyššie uvedené pole ukazovateľa na displej funkcie ().
displej (p); // Vyvolajte zobrazenie funkcie. void display (int * d) {// Funkcia prijímajúca pole ukazovateľov. pre (int i = 0; i <10; i ++) {cout << ("index" <
Táto funkcia postupne zobrazí hodnoty prítomné v premenných, ktorých adresy sú uložené v tomto poli ukazovateľov.
Definícia ukazovateľa
Ukazovateľ je premenná, ktorá uchováva adresu v pamäti inej premennej. Dátový typ premennej ukazovateľa aj premennej, ktorej adresa je priradená ukazovateľovej premennej, musí byť rovnaký. Premenná ukazovateľa je deklarovaná ako nasledujúca.
// Vyhlásenie v C ++ type * name;
Tu je „typ“ typ údajov, „názov“ je názov premennej ukazovateľa. Typ určuje, akú adresu premennej je možné uložiť v premennej ukazovateľa. Napríklad celočíselný ukazovateľ uloží adresu celočíselnej premennej. Existujú dvaja operátori ukazovateľov „*“ a „&“. Operátor „*“ vráti hodnotu nachádzajúcu sa na adrese, ktorá je uložená v premennej a za ňou nasleduje znak „*“. Operátor „&“ vráti adresu premennej, za ktorou nasleduje znak „&“.
// napríklad int b = 10 int a = & b; // Tu je adresa b uložená v premennej a. // umožňuje adresu b je 2000, takže teraz a = 2000. int c = * a; // Tu premenná celočíselného ukazovateľa * a vráti hodnotu, ktorá sa nachádza na adrese uloženej v .ie. c = 10.
Na ukazovatele, t. J. Sčítanie a odčítanie, môžete použiť iba dva aritmetické operátory. Ak použijete prírastok na celočíselnú premennú ukazovateľa, zvýši sa o veľkosť dátového typu, t. J. O 2 bajty, pretože ide o celé číslo, na prírastok bude musieť ukazovať na ďalšiu celočíselnú premennú. To isté platí v prípade dekrementov.
// p je celé číslo s hodnotou 2000. p ++; // teraz p = 2002. p--; // teraz p znova obsahuje 2000, znížené o dva bajty.
- Pole uchováva premenné podobných typov údajov a dátové typy premenných sa musia zhodovať s typom poľa. Na druhej strane, ukazová premenná ukladá adresu premennej, typu podobného typu ukazovacej premennej.
- Môžeme vygenerovať pole ukazovateľov, t. J. Pole, ktorého premenné sú ukazovatele ukazovateľov. Na druhej strane môžeme vytvoriť ukazovateľ, ktorý ukazuje na pole.
- Java podporuje pole, ale nepodporuje ukazovatele.
- Veľkosť poľa určuje počet premenných, ktoré je možné uložiť, zatiaľ čo; ukazová premenná môže uložiť adresu iba premennej
Poznámka:
Java nepodporuje ukazovatele a prísne sa im nevyhýba.
záver:
Keď musíme pracovať na dátových prvkoch podobného typu údajov, potom namiesto toho, aby sme pracovali oddelene na premenných, môžeme vytvoriť rad týchto premenných podobných typov údajov a potom s nimi pracovať. Ukazovatele sú potrebné pre niektorý program, dáva obrovský výkon, ale bohužiaľ, ak ukazovateľ obsahuje nesprávnu hodnotu, bude najťažšie nájsť chybu.