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++-aanwijzers en arrays

C++-aanwijzers 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 bevatten. Een pointer kan niet alleen het adres van een enkele variabele opslaan, maar ook het adres van cellen van een array.

Beschouw dit voorbeeld:

int *ptr;
int arr[5];

// store the address of the first
// element of arr in ptr
ptr = arr;

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

Merk op dat we arr . hebben gebruikt in plaats van &arr[0] . Dit komt omdat beide hetzelfde zijn. De onderstaande code is dus dezelfde 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] .


Wijs naar alle array-elementen

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

Hier, als ptr verwijst naar het eerste element in het bovenstaande voorbeeld en vervolgens ptr + 3 wijst naar het vierde element. Bijvoorbeeld,

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

Op dezelfde manier hebben we toegang tot de elementen met behulp van de enkele aanwijzer. Bijvoorbeeld,

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

Stel dat we ptr = &arr[2]; . hebben geïnitialiseerd dan

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

Opmerking: Het adres tussen ptr en ptr + 1 verschilt met 4 bytes. Het is omdat ptr is een verwijzing naar een int gegevens. En de grootte van int is 4 bytes in een 64-bits besturingssysteem.

Evenzo, als aanwijzer ptr wijst naar char typ data, dan het adres tussen ptr en ptr + 1 is 1 byte. Het is omdat de grootte van een teken 1 byte is.


Voorbeeld 1:C++-aanwijzers en arrays

// C++ Program to display address of each element of an array 

#include <iostream>
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<<"\nDisplaying 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;
}

Uitvoer

Displaying address using arrays: 
&arr[0] = 0x61fef0
&arr[1] = 0x61fef4
&arr[2] = 0x61fef8

Displaying address using pointers: 
ptr + 0 = 0x61fef0
ptr + 1 = 0x61fef4
ptr + 2 = 0x61fef8

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

Vervolgens gebruikten we de aanwijzer ptr om te verwijzen naar het adres van a[0] , ptr + 1 om naar het adres van a[1] te wijzen , enzovoort.


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

We moeten echter onthouden dat pointers en arrays niet hetzelfde zijn.

Er zijn een paar gevallen waarin arraynamen niet vervallen tot pointers. Ga voor meer informatie naar:Wanneer vervalt de arraynaam niet in een aanwijzer?


Voorbeeld 2:Matrixnaam gebruikt als aanwijzer

// C++ Program to insert and display data entered by using pointer notation.

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
   // Insert data using pointer notation
    cout << "Enter 5 numbers: ";
    for (int i = 0; i < 5; ++i) {

        // store input number in arr[i]
        cin >> *(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;
}

Uitvoer

Enter 5 numbers: 2.5
3.5
4.5
5
2
Displaying data: 
2.5
3.5
4.5
5
2

Hier,

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

    cin >> *(arr + i) ;

    Deze code is gelijk aan de onderstaande code:

    cin >> arr[i];

    Merk op dat we geen aparte pointervariabele hebben gedeclareerd, maar dat we de arraynaam arr gebruiken voor de aanwijzernotatie.

    Zoals we al weten, is de arraynaam arr verwijst naar het eerste element van de array. We kunnen dus denken aan arr als een aanwijzer.

  2. Op dezelfde manier gebruikten we toen for loop om de waarden van arr . weer te geven aanwijzernotatie gebruiken.

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

    Deze code is gelijk aan

    cout << arr[i] << endl ;

C Taal

  1. C++ variabelen, literalen en constanten
  2. C++ klassen en objecten
  3. C++ Geheugenbeheer:nieuw en verwijderen
  4. C++ Openbare, beschermde en privé-erfenis
  5. C++ vriend Functie en vriend Klassen
  6. C-aanwijzers
  7. Relatie tussen arrays en pointers
  8. C Pass-adressen en -wijzers
  9. C-structuren en aanwijzers
  10. Structuren en klassen in C++
  11. Arrays in C++ | Verklaren | Initialiseren | Aanwijzer naar matrixvoorbeelden