Tutoriales

Puntero a puntero en C++

Este artículo presenta el concepto de puntero a puntero en C++. Un indicador apuntador apunta o almacena la dirección de otro indicador y permite operaciones en el propio indicador. Usando este concepto, podemos modificar fácilmente un puntero en otra ubicación de la memoria. Los indicadores duales facilitan la asignación dinámica de memoria o matrices multidimensionales para operar sobre los elementos de la matriz. Discutiremos el funcionamiento y uso de punteros en C++ con ejemplos apropiados.

Escenario 1: representación de la memoria de indicador a indicador

En este caso, declarar un indicador doble es similar a declarar un indicador con un asterisco adicional.

antes del nombre del indicador. Podemos representar fácilmente punteros duales a ubicaciones de memoria en C++. El fragmento de código para un indicador que apunta a un indicador es el siguiente:
#incluir
Utilice el espacio de nombres estándar; maestro de enteros(
)
{ Bits enteros =50
; entero*
ptr; ptrr =&
número; entero**
ptrr1;PTRR1 =&
ptr;kut< «La dirección de la memoria de destino es:\norte«
;kut<«ptrr(puntero):»<PTRR<«\norte«
;kut<«*ptrr1 (puntero doble):»<<*PTRR1<«\norte»
;kut< «Los valores almacenados en el indicador son:\norte«
;kut<«*ptrr=»<<*PTRR<
Finalizar;kut<«**ptrr1(puntero a puntero)=»<<**PTRR1<
Finalizar; devolver
;

}


En la función principal tomamos una variable cuya dirección de memoria debe almacenarse en el indicador. Ahora, inicializamos la variable «dígito». Después de eso, declaramos el puntero «ptrr» que almacena la dirección de memoria «numérica». Ahora declaramos un puntero doble llamado «**ptrr1», que almacena la dirección del puntero «*ptrr». Al final del código mostramos la memoria y los valores del indicador e indicadores dobles en la pantalla de la consola. La salida de este código es la siguiente:

LEER  Cómo instalar la última versión de Python en Debian Linux

La dirección de memoria del puntero «ptrr» es «0x6ffe04» y el puntero «*ptrr1» también almacena la dirección de memoria del puntero «ptrr». El valor almacenado en el indicador es «50». Básicamente, la dirección de un indicador doble es siempre la misma que la dirección de memoria del indicador.

Escenario 2: uso de indicadores como parámetros de función

En este caso, aprenderemos cómo pasar un puntero doble como argumento en cualquier función para realizar una asignación de memoria temporal en cualquier variable. El fragmento de código de los parámetros de la función del indicador doble es el siguiente:

#incluirvoid Obtener dirección de memoria( entero**doble puntero )

{ temperatura interna =200
;* doble puntero =&
temperatura;

}maestro de enteros( )
{ entero*
ptr_1; entero**
doble puntero; doble puntero =&
ptr_1;Obtener dirección de memoria(doble puntero)
; std::cout < «El valor de **double_ptr es:» <** doble puntero <
std::endl; devolver
;

}

Aquí veremos cómo funciona el concepto de indicadores en C++. Recuerde que un indicador está declarado en el programa para su uso con dos indicadores. Por lo tanto, establecimos la función «getMemoryAddress». Diseñamos esta función para que cuando pasemos parámetros, obtenga automáticamente la dirección de memoria del puntero dual.

En la función utilizamos la variable «tempp» y el indicador doble «**double_ptr». Pasamos la dirección de la variable «tempp» especificada a un puntero doble y pasamos el valor del puntero doble como argumento a la función. El programa muestra los resultados del código de la función principal en la pantalla de la consola, por lo que todo en la función principal es ejecutable. Llamamos al indicador «ptr_1» y al indicador doble «double_ptr» en la función principal. Pasamos la dirección del indicador al indicador doble.

Ahora, pasamos la variable del indicador dual en la función de anulación y pasamos el indicador a la variable del indicador en la declaración del flujo de salida «cout» para mostrar el resultado del indicador dual.

Cuando el compilador llega a una función primordial, el verificador del compilador que define la función ejecuta el código dentro de la función y pasa el resultado a la función principal.


El resultado de este código se adjunta a continuación:

Resultado: El valor del indicador doble es 200.

Escenario 3: uso de una matriz 2D con indicadores para indicadores

En este ejemplo, trabajaremos con una matriz bidimensional con dos indicadores. Obtenemos una matriz y pasamos la dirección de la matriz en el puntero. El código completo para este escenario es el siguiente:maestro de enteros( )
{ fila entera constante =3
; columna int constante =2
; entero** matriz = nuevo entero[rows]*
; para( entero yo =0 ; I <Está bien; ++yo )
{[i] matriz[cols]= nuevo entero
;
} para( entero yo =0 ; I <Está bien; ++yo )
{ para( Entero j =0 ; <Columna; ++j )
{[i][j] matriz = yo *
columna+j;
}
} para( entero yo =0 ; I <Está bien; ++yo )
{ para( Entero j =0 ; <Columna; ++j )
{ kut <[i][j] matriz <» «
; }
kut <
Finalizar;
} para( entero yo =0 ; I <Está bien; ++yo )
{[] borrar[i]matriz
;
}[] borrar
matriz; devolver
;

}

Como todos sabemos, hay muchas filas y columnas en una matriz bidimensional. En la función principal inicializamos las filas y columnas con «const int». Después de eso, asignamos espacio de memoria para las filas y espacio de memoria para las columnas de cada fila. Pasamos el valor de la fila como indicador en el indicador doble de matriz como «**matriz». En este indicador dual, el ciclo del número de filas ejecutadas sigue siendo cierto. Luego, se ejecuta otro bucle interno hasta que la condición se vuelve falsa.

Después de la asignación de memoria, asignamos valores en la matriz nuevamente: bucle externo para filas y bucle interno para columnas de la matriz 2D. En el bucle interno, los valores de fila y columna se asignan a los indicadores dobles y se realizan las operaciones aritméticas requeridas. Mostramos los valores de una matriz bidimensional, como el número de filas y columnas asignadas en la memoria. Los números de filas y columnas siempre apuntan a punteros dobles que almacenan valores de filas y columnas. Finalmente, limpiamos la memoria en C++ y liberamos la matriz de la memoria.

A continuación se adjunta el resultado de una matriz 2D con indicadores duales:

Escenario 4: intercambio de punteros mediante puntero a puntero

Aquí aprenderemos cómo intercambiar punteros en C++ declarando punteros dobles. El fragmento de código para este escenario es el siguiente:
#incluirIntercambio no válido( entero** ptrr_1, entero**ptrr_2 )
{ entero* variable temporal =*
ptrr_1;* ptrr_1=*
ptrr_2;*
ptrr_2 = temp_var;
}maestro de enteros( )
{ entero x =15 y =25
; entero* ptrA =& X,* ptrrB=&
y; std::cout < «Antes del cambio: *ptrrA =» <* PTRA < «, *ptrrB es = « <* PTRRB <
std::endl;intercambio(& ptrA,&PTRRB)
; std::cout < «Después del intercambio: *ptrrA=» <* PTRA < «, *ptrrB es = « <* PTRRB <
std::endl; devolver
;

}

Primero, creamos la función de intercambio, pasando los dos indicadores como parámetros de la función. En la función de intercambio, obtenemos el puntero «temp» y pasamos el valor de «pointer1» a «temp» durante un período de tiempo. Luego, pasamos el valor de «puntero2» a «puntero1». Finalmente, pasamos el valor del indicador «temp» a «pointer2».

En la función principal, necesitamos pasar o anular dos indicadores en la función «intercambiar». Pasamos la dirección de la variable al puntero dado. Luego, se muestran los valores de los indicadores antes y después del intercambio de indicadores.


El resultado de este código se adjunta a continuación:

Como podemos ver, el uso de punteros dobles en C++ intercambia con éxito el valor del puntero.

en conclusión

Concluimos que los punteros a punteros siempre almacenan la dirección de memoria de cualquier puntero en C++. Podemos usar indicadores duales para usar temporalmente la ubicación de memoria de cualquier indicador en cualquier momento. Esta es una forma muy eficaz de manipular indirectamente direcciones de memoria y acceder a datos.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba