Punteros y matrices de C ++

En este tutorial, aprenderemos sobre la relación entre matrices y punteros con la ayuda de ejemplos.

En C ++, los punteros son variables que contienen direcciones de otras variables. Un puntero no solo puede almacenar la dirección de una sola variable, sino que también puede almacenar la dirección de las celdas de una matriz.

Considere este ejemplo:

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

Aquí, ptr es una variable de puntero mientras que arr es una intmatriz. El código ptr = arr;almacena la dirección del primer elemento de la matriz en la variable ptr.

Observe que hemos usado en arrlugar de &arr(0). Esto se debe a que ambos son iguales. Entonces, el código a continuación es el mismo que el código anterior.

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

Las direcciones para el resto de los elementos de la matriz están dadas por &arr(1), &arr(2), &arr(3), y &arr(4).

Señale todos los elementos de la matriz

Suponga que necesitamos apuntar al cuarto elemento de la matriz usando el mismo puntero ptr.

Aquí, si ptr apunta al primer elemento en el ejemplo anterior, ptr + 3apuntará al cuarto elemento. Por ejemplo,

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

Del mismo modo, podemos acceder a los elementos utilizando el puntero único. Por ejemplo,

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

Supongamos que si hemos inicializado ptr = &arr(2);entonces

 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);
Trabajo de punteros de C ++ con matrices

Nota: La dirección entre ptr y ptr + 1 difiere en 4 bytes. Es porque ptr es un puntero a un intdato. Y el tamaño de int es de 4 bytes en un sistema operativo de 64 bits.

De manera similar, si el puntero ptr apunta al chartipo de datos, entonces la dirección entre ptr y ptr + 1 es de 1 byte. Es porque el tamaño de un carácter es de 1 byte.

Ejemplo 1: Arrays y punteros de 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; )

Salida

 Visualización de direcciones usando matrices: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Visualización de direcciones usando punteros: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

En el programa anterior, primero simplemente imprimimos las direcciones de los elementos de la matriz sin usar la variable de puntero ptr.

Luego, usamos el puntero ptr para apuntar a la dirección de a (0), ptr + 1para apuntar a la dirección de a (1), y así sucesivamente.

En la mayoría de los contextos, los nombres de las matrices se convierten en punteros. En palabras simples, los nombres de las matrices se convierten en punteros. Esa es la razón por la que podemos usar punteros para acceder a elementos de matrices.

Sin embargo, debemos recordar que los punteros y las matrices no son lo mismo.

Hay algunos casos en los que los nombres de las matrices no se convierten en punteros. Para obtener más información, visite: ¿Cuándo el nombre de la matriz no se descompone en un puntero?

Ejemplo 2: nombre de matriz utilizado como puntero

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

Salida

 Ingrese 5 números: 2.5 3.5 4.5 5 2 Visualización de datos: 2.5 3.5 4.5 5 2

Aquí,

  1. Primero usamos la notación de puntero para almacenar los números ingresados ​​por el usuario en la matriz arr.

     cin>> *(arr + i) ;

    Este código es equivalente al código siguiente:

     cin>> arr(i);

    Observe que no hemos declarado una variable de puntero separada, sino que estamos usando el nombre de matriz arr para la notación de puntero.

    Como ya sabemos, el nombre de la matriz arr apunta al primer elemento de la matriz. Entonces, podemos pensar que arr actúa como un puntero.

  2. De manera similar, luego usamos forloop para mostrar los valores de arr usando notación de puntero.

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

    Este código es equivalente a

     cout << arr(i) << endl ;

Articulos interesantes...