Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C++ Pointers en Arrays: De relatie meesteren

C++ Pointers en Arrays

In deze tutorial leren we over de relatie tussen arrays en pointers met behulp van voorbeelden.

In C++ zijn pointers variabelen die adressen van andere variabelen opslaan. Niet alleen kan een pointer het adres van een enkele variabele opslaan, het kan ook het adres van cellen van een array opslaan.

Bekijk dit voorbeeld:

 int *ptr; int arr[5]; // sla het adres van het eerste // element van arr op in ptr ptr = arr;

Hier is ptr een pointervariabele terwijl arr een int array is. De code ptr = arr; slaat het adres van het eerste element van de array op in variabele ptr.

Let op dat we arr hebben gebruikt in plaats van &arr[0]. Dit is omdat beide hetzelfde zijn. Dus de onderstaande code is hetzelfde als de bovenstaande code.

 int *ptr; int arr[5]; ptr = &arr[0];

De adressen voor de rest van de array-elementen worden gegeven door &arr[1], &arr[2], &arr[3] en &arr[4].


Naar elk array-element wijzen

Stel we moeten naar het vierde element van de array wijzen met dezelfde pointer ptr.

Hier, als ptr naar het eerste element in het bovenstaande voorbeeld wijst, dan zal ptr + 3 naar het vierde element wijzen. Bijvoorbeeld,

 int *ptr; int arr[5]; ptr = arr; ptr + 1 is equivalent aan &arr[1]; ptr + 2 is equivalent aan &arr[2]; ptr + 3 is equivalent aan &arr[3]; ptr + 4 is equivalent aan &arr[4];

Op dezelfde manier kunnen we de elementen benaderen met de enkele pointer. Bijvoorbeeld,

 // gebruik dereferentie-operator *ptr == arr[0]; *(ptr + 1) is equivalent aan arr[1]; *(ptr + 2) is equivalent aan arr[2]; *(ptr + 3) is equivalent aan arr[3]; *(ptr + 4) is equivalent aan arr[4];

Stel als we ptr = &arr[2]; geïnitialiseerd hebben, dan

 ptr - 2 is equivalent aan &arr[0]; ptr - 1 is equivalent aan &arr[1]; ptr + 1 is equivalent aan &arr[3]; ptr + 2 is equivalent aan &arr[4];
C++ Pointers en Arrays: De relatie meesteren

Let op: Het adres tussen ptr en ptr + 1 verschilt met 4 bytes. Dit is omdat ptr een pointer is naar een int data. En de grootte van int is 4 bytes in een 64-bit besturingssysteem.

Op dezelfde manier, als pointer ptr wijst naar char type data, dan is het adres tussen ptr en ptr + 1 1 byte. Dit is omdat de grootte van een karakter 1 byte is.


Voorbeeld 1: C++ Pointers en Arrays

 // C++ Programma om adres van elk element van een array weer te geven #include <iostream> using namespace std; int main() { float arr[3]; // pointer variabele declareren float *ptr; cout << "Adressen weergeven met arrays: " << endl; // for-lus gebruiken om adressen van alle array-elementen te printen for (int i = 0; i < 3; ++i) { cout << "&arr[" << i << "] = " << &arr[i] << endl; } // ptr = &arr[0] ptr = arr; cout<<"\nAdressen weergeven met pointers: "<< endl; // for-lus gebruiken om adressen van alle array-elementen te printen // met pointer-notatie for (int i = 0; i < 3; ++i) { cout << "ptr + " << i << " = "<< ptr + i << endl; } return 0; }

Output

 Adressen weergeven met arrays: &arr[0] = 0x61fef0 &arr[1] = 0x61fef4 &arr[2] = 0x61fef8 Adressen weergeven met pointers: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

In het bovenstaande programma hebben we eerst simpelweg de adressen van de array-elementen geprint zonder de pointervariabele ptr te gebruiken.

Vervolgens hebben we de pointer ptr gebruikt om naar het adres van a[0] te wijzen, ptr + 1 om naar het adres van a[1] te wijzen, enz.


In de meeste contexten vervallen arraynamen naar pointers. In eenvoudige woorden, arraynamen worden omgezet naar pointers. Dat is de reden waarom we pointers kunnen gebruiken om toegang te krijgen tot elementen van arrays.

Echter, we moeten onthouden dat pointers en arrays niet hetzelfde zijn.

Er zijn een paar gevallen waar arraynamen niet vervallen naar pointers. Om meer te leren, bezoek: Wanneer vervalt arraynaam niet in een pointer?


Voorbeeld 2: Arraynaam gebruikt als pointer

 // C++ Programma om in te voeren en weer te geven data die ingevoerd is met pointer-notatie. #include <iostream> using namespace std; int main() { float arr[5]; // Data invoeren met pointer-notatie cout << "Voer 5 getallen in: "; for (int i = 0; i < 5; ++i) { // invoergetal opslaan in arr[i] cin >> *(arr + i) ; } // Data weergeven met pointer-notatie cout << "Data weergeven: " << endl; for (int i = 0; i < 5; ++i) { // waarde van arr[i] weergeven cout << *(arr + i) << endl ; } return 0; }

Output

 Voer 5 getallen in: 2.5 3.5 4.5 5 2 Data weergeven: 2.5 3.5 4.5 5 2

Hier,

  1. We gebruikten eerst de pointer-notatie om de door de gebruiker ingevoerde getallen in de array arr op te slaan.

     cin >> *(arr + i) ;

    Deze code is equivalent aan de onderstaande code:

     cin >> arr[i];

    Let op dat we geen afzonderlijke pointervariabele hebben gedeclareerd, maar de arraynaam arr voor de pointer-notatie gebruiken.

    Zoals we al weten, wijst de arraynaam arr naar het eerste element van de array. Dus we kunnen arr zien alsof het werkt als een pointer.

  2. Op dezelfde manier gebruikten we dan de for lus om de waarden van arr met pointer-notatie weer te geven.

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

    Deze code is equivalent aan

     cout << arr[i] << endl ;

C Taal

  1. C++ Structuren vs Classes: Een praktische gids voor embedded-ontwikkelaars
  2. C++ variabelen, literalen en constanten: een uitgebreide gids
  3. C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
  4. C++ Geheugenbeheer meesteren: Expert gebruik van new en delete
  5. C++ Overerving Beheersen: Public, Protected & Private Uitgelegd
  6. C++ Friend Functies en Friend Classes: Toegangscontrole Beheersen
  7. C-pointers onder de knie krijgen: Een praktische, expert-gids
  8. De relatie tussen arrays en pointers in C begrijpen
  9. C-programmeren: Adressen & pointers doorgeven aan functies – Een praktische gids
  10. C Structs en Pointers onder de knie krijgen: Een praktische gids
  11. C++ Arrays Ontmaskerd: Declaratie, Initialisatie en Pointer‑Technieken