Punteros y arreglos de C++
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 un int
formación. El código ptr = arr;
almacena la dirección del primer elemento del arreglo en la variable ptr .
Note que hemos usado arr
en lugar de &arr[0]
. Esto se debe a que ambos son iguales. Entonces, el código de abajo es el mismo que el código de arriba.
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]
.
Apuntar a todos los elementos del arreglo
Supongamos 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 y luego ptr + 3
apuntará 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 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];
int
datos. Y el tamaño de int es de 4 bytes en un sistema operativo de 64 bits.
De manera similar, si el puntero ptr está apuntando a char
escriba data, luego 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:punteros y matrices de 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;
}
Salida
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
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 + 1
para 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 los elementos de las 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 convierte en un puntero?
Ejemplo 2:nombre de matriz utilizado como puntero
// 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;
}
Salida
Enter 5 numbers: 2.5 3.5 4.5 5 2 Displaying data: 2.5 3.5 4.5 5 2
Aquí,
-
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 siguiente código:
cin >> arr[i];
Tenga en cuenta 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 en arr actuando como un puntero.
-
De manera similar, luego usamos
for
bucle 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 ;
Lenguaje C
- Variables, literales y constantes de C++
- Clases y objetos de C++
- Gestión de memoria C++:nuevo y eliminar
- Herencia pública, protegida y privada de C++
- Función amiga de C++ y Clases amigas
- Punteros C
- Relación entre matrices y punteros
- Direcciones y punteros de C Pass
- Estructuras C y punteros
- Estructuras y clases en C ++
- Matrices en C++ | Declarar | Inicializar | Ejemplos de puntero a matriz