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. Um ponteiro pode não apenas armazenar o endereço de uma única variável, mas também pode armazenar o endereço das células de uma matriz.

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 intarray. O código ptr = arr;armazena o endereço do primeiro elemento da matriz na variável ptr.

Observe que usamos em arrvez de &arr(0). Isso ocorre porque ambos são iguais. Portanto, o código abaixo é igual ao código acima.

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

Os endereços para o resto dos elementos da matriz são dadas por &arr(1), &arr(2), &arr(3), e &arr(4).

Aponte para todos os elementos do array

Suponha que precisamos apontar para o quarto elemento da matriz usando o mesmo ponteiro ptr.

Aqui, se ptr apontar para o primeiro elemento no exemplo acima, então ptr + 3apontará 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 único ponteiro. 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 se 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);
Trabalho de ponteiros C ++ com matrizes

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

Da mesma forma, se o ponteiro ptr estiver apontando para chardados do tipo, o endereço entre ptr e ptr + 1 será de 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 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; )

Resultado

 Exibindo endereço usando matrizes: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Exibindo endereço usando ponteiros: 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 + 1para apontar para o endereço de a (1) e assim por diante.

Na maioria dos contextos, os nomes de array se transformam em ponteiros. Em palavras simples, os nomes das matrizes 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 matrizes não são iguais.

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

Exemplo 2: nome da matriz usado como ponteiro

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

Resultado

 Digite 5 números: 2,5 3,5 4,5 5 2 Exibindo dados: 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 em vez disso, 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 do array. Portanto, podemos pensar em arr como agindo como um ponteiro.

  2. Da mesma forma, usamos o forloop para exibir os valores de arr usando a notação de ponteiro.

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

    Este código é equivalente a

     cout << arr(i) << endl ;

Artigos interessantes...