Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Ponteiros e matrizes C++

Ponteiros e matrizes C++


Neste tutorial, aprenderemos sobre a relação entre arrays e ponteiros com a ajuda de exemplos.

Em C++, Ponteiros são variáveis ​​que contêm endereços de outras variáveis. Não só um ponteiro pode armazenar o endereço de uma única variável, ele também pode armazenar o endereço das células de um array.

Considere este exemplo:

int *ptr;
int arr[5];

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

Aqui, ptr é uma variável de ponteiro enquanto arr é um int variedade. O código ptr = arr; armazena o endereço do primeiro elemento do array na variável ptr .

Observe que usamos arr em vez de &arr[0] . Isso porque ambos são iguais. Portanto, o código abaixo é o mesmo que o código acima.
int *ptr;
int arr[5];
ptr = &arr[0];

Os endereços para o resto dos elementos do array são dados por &arr[1] , &arr[2] , &arr[3] e &arr[4] .

Apontar para todos os elementos da matriz


Suponha que precisamos apontar para o quarto elemento do array usando o mesmo ponteiro ptr .

Aqui, se ptr aponta para o primeiro elemento no exemplo acima e então ptr + 3 apontará para o quarto elemento. Por exemplo,
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];

Da mesma forma, podemos acessar os elementos usando o ponteiro único. Por exemplo,
// 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];

Suponha que inicializamos ptr = &arr[2]; então
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];

Observação: O endereço entre ptr e ptr + 1 difere em 4 bytes. É porque ptr é um ponteiro para um int dados. E o tamanho de int é de 4 bytes em um sistema operacional de 64 bits.

Da mesma forma, se o ponteiro ptr está apontando para char digite data, então o endereço entre ptr e ptr + 1 é 1 byte. É porque o tamanho de um caractere é de 1 byte.

Exemplo 1:ponteiros e matrizes C++

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

Saída
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

No programa acima, primeiro simplesmente imprimimos os endereços dos elementos do array sem usar a variável de ponteiro ptr .

Em seguida, usamos o ponteiro ptr para apontar para o endereço de a[0] , ptr + 1 para apontar para o endereço de a[1] , e assim por diante.




Na maioria dos contextos, os nomes dos arrays decaem para ponteiros. Em palavras simples, os nomes dos arrays são convertidos em ponteiros. Essa é a razão pela qual podemos usar ponteiros para acessar elementos de arrays.

No entanto, devemos lembrar que ponteiros e arrays não são a mesma coisa.

Existem alguns casos em que os nomes de matrizes não se transformam em ponteiros. Para saber mais, visite:Quando o nome do array não decai em um ponteiro?

Exemplo 2:nome do array usado como ponteiro

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

Saída
Enter 5 numbers: 2.5
3.5
4.5
5
2
Displaying data: 
2.5
3.5
4.5
5
2

Aqui,

  1. Primeiro usamos a notação de ponteiro para armazenar os números inseridos pelo usuário no array arr .
    cin >> *(arr + i) ;

    Este código é equivalente ao código abaixo:


    cin >> arr[i];

    Observe que não declaramos uma variável de ponteiro separada, mas estamos usando o nome do array arr para a notação de ponteiro.

    Como já sabemos, o nome do array arr aponta para o primeiro elemento da matriz. Então, podemos pensar em arr agindo como um ponteiro.

  2. Da mesma forma, usamos for loop para exibir os valores de arr usando notação de ponteiro.
    cout << *(arr + i) << endl ;

    Este código é equivalente a
    cout << arr[i] << endl ;

Linguagem C

  1. Variáveis, literais e constantes de C++
  2. Classes e objetos C++
  3. Gerenciamento de memória C++:novo e excluir
  4. Herança pública, protegida e privada C++
  5. Função de amigo C++ e classes de amigo
  6. Ponteiros C
  7. Relação entre arrays e ponteiros
  8. Endereços e ponteiros de passagem C
  9. Estruturas e ponteiros C
  10. Estruturas e classes em C ++