C ++ mutató és tömb

Ebben az oktatóanyagban példák segítségével megismerhetjük a tömbök és a mutatók kapcsolatát.

A C ++ nyelven a mutatók olyan változók, amelyek más változók címeit tárolják. A mutató nem csak egyetlen változó címét tárolhatja, hanem egy tömb celláinak címét is.

Tekintsük ezt a példát:

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

Itt a ptr egy mutató változó, míg az arr egy inttömb. A kód ptr = arr;a tömb első elemének címét a ptr változóban tárolja.

Figyeljük meg, hogy a arrhelyett használtuk &arr(0). Ez azért van, mert mindkettő ugyanaz. Tehát az alábbi kód megegyezik a fenti kóddal.

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

A címek a többi tömbelemek által adott &arr(1), &arr(2), &arr(3), és a &arr(4).

Mutasson a Minden tömb elemre

Tegyük fel, hogy a tömb negyedik elemére kell mutatnunk ugyanazzal a ptr mutatóval.

Itt, ha a ptr a fenti példa első elemére mutat, akkor ptr + 3a negyedik elemre mutat. Például,

 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);

Hasonlóképpen, az elemeket az egyetlen mutató segítségével érhetjük el. Például,

 // 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);

Tegyük fel, ha már inicializált ptr = &arr(2);majd

 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);
C ++ mutatók működése tömbökkel

Megjegyzés: A ptr és a ptr + 1 közötti cím 4 bájttal különbözik. Ez azért van, mert a ptr egy intadat mutatója . És az int mérete 4 bájt egy 64 bites operációs rendszerben.

Hasonlóképpen, ha a ptr mutató a chartípusú adatokra mutat , akkor a ptr és a ptr + 1 közötti cím 1 bájt. Ez azért van, mert a karakter mérete 1 bájt.

1. példa: C ++ mutatók és tömbök

 // 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; )

Kimenet

 Cím megjelenítése tömbök segítségével: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Cím megjelenítése mutatókkal: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

A fenti programban először egyszerűen kinyomtattuk a tömb elemek címeit a ptr mutatóváltozó használata nélkül.

Ezután a ptr mutató segítségével a (0) ptr + 1címére, az (1) címére stb.

A legtöbb összefüggésben a tömbnevek mutatókra bomlanak. Egyszerű szavakkal, a tömb neveket mutatóakká alakítják át. Ezért használhatunk mutatókat a tömb elemeihez.

Nem szabad megfeledkeznünk arról, hogy a mutatók és tömbök nem azonosak.

Néhány esetben a tömbnevek nem bomlanak le a mutatókra. Ha többet szeretne megtudni, látogasson el ide: Mikor nem bomlik a tömb neve mutatóvá?

2. példa: Mutatóként használt tömb neve

 // 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; )

Kimenet

 Írjon be 5 számot: 2,5 3,5 4,5 5 2 2 Adatok megjelenítése: 2,5 3,5 4,5 5 2

Itt,

  1. Először a mutató jelölését használtuk a felhasználó által beírt számok tömbbe történő tárolására.

     cin>> *(arr + i) ;

    Ez a kód megegyezik az alábbi kóddal:

     cin>> arr(i);

    Figyelje meg, hogy nem deklaráltunk külön mutatóváltozót, hanem inkább az arr tömb nevet használjuk a mutató jelöléséhez.

    Mint már tudjuk, az arr tömb neve a tömb első elemére mutat. Tehát úgy gondolhatjuk, hogy az arr mutatóként viselkedik.

  2. Hasonlóképpen, ezután a forciklust használtuk az arr értékeinek megjelenítésére mutató jelöléssel.

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

    Ez a kód egyenértékű a következővel:

     cout << arr(i) << endl ;

érdekes cikkek...