La memoria en un programa se divide en dos partes: estática y dinámica. La memoria estática se refiere a variables de un tamaño fijo a lo largo del programa, mientras que la memoria dinámica se adapta al tamaño de las variables que el programa necesita. Por ejemplo, si un programa necesita almacenar un número variable de cadenas, se utilizaría memoria dinámica. En lengua c, punteros dobles (**) se usan cuando se trabaja con memoria dinámica.
¿Qué es un doble puntero (**)?
A doble puntero (**) es un puntero que apunta a la ubicación de otro puntero. La ubicación de la variable en la memoria se indica con este puntero adicional. Como resultado, cuando un doble puntero (**) se asigna a una variable, se crean dos niveles de dirección de memoria. Esto permite que el lenguaje C acceda a la memoria dinámica más fácilmente. En la pila de memoria, un doble puntero (**) ocupa la misma cantidad de espacio que un puntero regular.
Veamos la sintaxis de un doble puntero (**):
data_type_of_pointer ** name_of_variable = & normal_pointer_variable;
Ahora veamos un ejemplo de uso doble puntero (**) En un programa C.
#incluir
int main ()
int val = 36;
int* ptr1;
int ** ptr2;
PTR1 = &val;
ptr2 = &ptr1;
printf ("El valor de val es: %d \ n", val);
printf ("El valor de Val usando un solo puntero es: %d \ n", *ptr1);
printf ("El valor de Val con doble puntero es: %d \ n", ** ptr2);
regresar 0;
Estamos utilizando la variable "Val"Con el valor 36 en el código anterior. Luego señalamos un puntero (PTR1) en la dirección del Val, que se dirige en la dirección de un segundo puntero (PTR2) después. Pero los punteros no cambian el valor del 'Val', que permanece 36.
Producción
Punteros dobles (**) En el lenguaje de programación C, se comporta de manera idéntica a los punteros regulares en C. Como resultado, el Pointer (**) El tamaño de la variable y el tamaño de la variable regular de la variable son siempre idénticos.
#incluir
int main ()
int val = 36;
int* ptr1;
int ** ptr2;
PTR1 = &val;
ptr2 = &ptr1;
printf ("tamaño del puntero normal: %d \ n", sizeof (PTR1));
printf ("tamaño del puntero doble: %d \ n", sizeof (ptr2));
regresar 0;
Estamos utilizando la variable "Val"Con el valor 36 en este código. Luego señalamos un puntero (PTR1) en la dirección del Val, que se dirige en la dirección de un segundo puntero (PTR2) después. Se calcula el tamaño de ambos punteros, que es idéntico, i.mi. 8.
Producción
¿Qué hace? ** en el idioma C?
Hay varias funciones de punteros dobles que se mencionan aquí:
1: Acceso a la memoria dinámica
La característica de punteros dobles (**) es lo que permite que el lenguaje C configure y acceda a la memoria dinámica. Para hacer esto, se proporciona un puntero con una dirección que coincida con el primer elemento de una matriz. El doble puntero (**) luego señala este puntero, permitiendo que los datos en esta ubicación sean o escriban. A medida que se ejecuta el programa, se pueden agregar más elementos a la matriz utilizando un doble puntero (**).
2: Defina una matriz de puntero
Otro uso para punteros dobles (**) es definir una variedad de punteros. Esto es útil cuando el programa necesita acceder a grandes cantidades de datos sin preocuparse por el tamaño de la matriz. A doble puntero (**) puede acceder rápidamente a la dirección de estos punteros, permitiendo que el programa procese los datos sin el problema de cambiar el tamaño de la matriz cada vez que se cambia un valor.
3: Acceso a la ubicación de la dirección de memoria
En el nivel más básico, el doble puntero (**) simplemente le da al programador acceso a la dirección de una ubicación de memoria determinada. Con esta dirección, el programador puede acceder a cualquier datos almacenados en esa ubicación o modificar esos datos según sea necesario. Para hacer esto, el programador simplemente desarmenta el doble puntero (**), que se realiza usando el carácter de asterisco (*). Por el doble puntero (**), El programador ahora puede acceder y alterar los datos de formas que no eran anteriores.
4: Crear estructuras de datos complejas
Además, un doble puntero (**) También se puede utilizar para crear estructuras de datos más complejas, como árboles y gráficos. Nodos, que pueden apuntar a uno o varios nodos adicionales y formar una estructura más sofisticada en árboles y gráficos. Para crear una estructura tan compleja, el programador debe definir nuevamente un doble puntero (**) Eso apunta a los nodos en la estructura de datos. El doble puntero (**) permite que el programador acceda y modifique los nodos en la estructura de una manera que no sería posible sin el doble puntero (**).
Conclusión
Punteros dobles (**) son una parte poderosa del lenguaje C, que permite que los programas funcionen con grandes volúmenes de datos y memoria dinámica. Proporcionan la dirección de una pieza de datos para facilitar el acceso y mantienen los dos niveles de dirección durante el paso de los datos. Utilizando punteros dobles (**), Un programa de lenguaje C puede procesar rápidamente grandes cantidades de datos sin la necesidad de cambiar el tamaño de la matriz cada vez.