Ukazovatele a polia v C ++

V tomto tutoriále sa pomocou príkladov dozvieme o vzťahu medzi poliami a ukazovateľmi.

V C ++ sú ukazovatele premenné, ktoré obsahujú adresy iných premenných. Nielen, že ukazovateľ môže uložiť adresu jednej premennej, ale aj adresu buniek v poli.

Zvážte tento príklad:

 int *ptr; int arr(5); // store the address of the first // element of arr in ptr ptr = arr;

Tu je ptr ukazovateľová premenná, zatiaľ čo arr je intpole. Kód ptr = arr;ukladá adresu prvého prvku poľa do premennej ptr.

Všimnite si, že sme použili arrnamiesto &arr(0). Je to tak preto, lebo obe sú rovnaké. Nižšie uvedený kód je teda rovnaký ako vyššie uvedený kód.

 int *ptr; int arr(5); ptr = &arr(0);

Adresy pre zvyšok prvky polia sú dané &arr(1), &arr(2), &arr(3), a &arr(4).

Ukážte na všetky prvky poľa

Predpokladajme, že musíme ukazovať na štvrtý prvok poľa pomocou rovnakého ukazovateľa ptr.

Ak tu ptr ukazuje na prvý prvok vo vyššie uvedenom príklade, ptr + 3bude ukazovať na štvrtý prvok. Napríklad,

 int *ptr; int arr(5); ptr = arr; ptr + 1 is equivalent to &arr(1); ptr + 2 is equivalent to &arr(2); ptr + 3 is equivalent to &arr(3); ptr + 4 is equivalent to &arr(4);

Podobne môžeme k prvkom pristupovať pomocou jedného ukazovateľa. Napríklad,

 // use dereference operator *ptr == arr(0); *(ptr + 1) is equivalent to arr(1); *(ptr + 2) is equivalent to arr(2); *(ptr + 3) is equivalent to arr(3); *(ptr + 4) is equivalent to arr(4);

Predpokladajme, že ak sme ptr = &arr(2);potom inicializovali

 ptr - 2 is equivalent to &arr(0); ptr - 1 is equivalent to &arr(1); ptr + 1 is equivalent to &arr(3); ptr + 2 is equivalent to &arr(4);
Práca ukazovateľov C ++ s poľami

Poznámka: Adresa medzi ptr a ptr + 1 sa líši o 4 bajty. Je to preto, lebo ptr je ukazovateľ na intúdaje. A veľkosť int je 4 bajty v 64-bitovom operačnom systéme.

Podobne, ak ukazovateľ ptr ukazuje na chartypové údaje, potom je adresa medzi ptr a ptr + 1 1 bajt. Je to preto, že veľkosť znaku je 1 bajt.

Príklad 1: C ++ ukazovatele a polia

 // C++ Program to display address of each element of an array #include using namespace std; int main() ( float arr(3); // declare pointer variable float *ptr; cout << "Displaying address using arrays: " << endl; // use for loop to print addresses of all array elements for (int i = 0; i < 3; ++i) ( cout << "&arr(" << i << ") = " << &arr(i) << endl; ) // ptr = &arr(0) ptr = arr; cout<<"Displaying address using pointers: "<< endl; // use for loop to print addresses of all array elements // using pointer notation for (int i = 0; i < 3; ++i) ( cout << "ptr + " << i << " = "<< ptr + i << endl; ) return 0; )

Výkon

 Zobrazenie adresy pomocou polí: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Zobrazenie adresy pomocou ukazovateľov: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

Vo vyššie uvedenom programe sme najskôr jednoducho vytlačili adresy prvkov poľa bez použitia premennej ukazovateľa ptr.

Potom sme použili ukazovateľ ptr na ukážku na adresu a (0), ptr + 1na ukážku na adresu a (1) atď.

Vo väčšine kontextov sa názvy polí rozpadajú na ukazovatele. Jednoduchými slovami sa názvy polí prevádzajú na ukazovatele. To je dôvod, prečo môžeme použiť ukazovatele na prístup k prvkom polí.

Mali by sme si však uvedomiť, že ukazovatele a polia nie sú rovnaké.

Existuje niekoľko prípadov, keď sa názvy polí nerozpadajú na ukazovatele. Ak sa chcete dozvedieť viac, navštívte: Kedy sa názov poľa nerozpadá na ukazovateľ?

Príklad 2: Názov poľa použitý ako ukazovateľ

 // C++ Program to insert and display data entered by using pointer notation. #include using namespace std; int main() ( float arr(5); // Insert data using pointer notation cout << "Enter 5 numbers: "; for (int i = 0; i > *(arr + i) ; ) // Display data using pointer notation cout << "Displaying data: " << endl; for (int i = 0; i < 5; ++i) ( // display value of arr(i) cout << *(arr + i) << endl ; ) return 0; )

Výkon

 Zadajte 5 čísel: 2,5 3,5 4,5 5 2 Zobrazenie údajov: 2,5 3,5 4,5 5 2

Tu,

  1. Najprv sme použili notáciu ukazovateľa na uloženie čísel zadaných používateľom do poľa arr.

     cin>> *(arr + i) ;

    Tento kód je ekvivalentný s kódom uvedeným nižšie:

     cin>> arr(i);

    Všimnite si, že sme nedeklarovali samostatnú premennú ukazovateľa, ale ako notáciu ukazovateľa skôr používame názov poľa arr.

    Ako už vieme, názov poľa ukazuje na prvý prvok poľa. Môžeme si teda myslieť, že arr funguje ako ukazovateľ.

  2. Podobne sme potom pomocou forslučky zobrazili hodnoty arr pomocou notácie ukazovateľa.

     cout << *(arr + i) << endl ;

    Tento kód je ekvivalentný s

     cout << arr(i) << endl ;

Zaujímavé články...