¿Qué es el puntero en C?
El puntero en C, es una variable que almacena la dirección de otra variable. Un puntero también se puede utilizar para hacer referencia a otra función de puntero. Un puntero se puede incrementar / disminuir, es decir, para apuntar a la ubicación de memoria siguiente / anterior. El propósito del puntero es ahorrar espacio en la memoria y lograr un tiempo de ejecución más rápido.
Cómo usar punteros en C
Si declaramos una variable v de tipo int, v realmente almacenará un valor.
v ahora es igual a cero.
Sin embargo, cada variable, además del valor, también tiene su dirección (o, simplemente, dónde se encuentra en la memoria). La dirección se puede recuperar poniendo un ampersand (&) antes del nombre de la variable.
Si imprime la dirección de una variable en la pantalla, se verá como un número totalmente aleatorio (además, puede ser diferente de una ejecución a otra).
Intentemos esto en la práctica con el puntero en C ejemplo
La salida de este programa es -480613588.
Ahora, ¿qué es un puntero? En lugar de almacenar un valor, un puntero almacenará y la dirección de una variable.
Variable del puntero
Int * y = & v;
VARIABLE
|
PUNTERO
|
Un valor almacenado en una dirección de memoria / almacenamiento con nombre
|
Una variable que apunta a la dirección de almacenamiento / memoria de otra variable
|
Declarar un puntero
Al igual que las variables, los punteros en C progra mming deben declararse antes de que puedan usarse en su programa. Los punteros se pueden nombrar como quieras siempre que obedezcan las reglas de denominación de C. Una declaración de puntero tiene la siguiente forma.
data_type * pointer_variable_name;
Aquí,
- data_type es el tipo base del puntero de los tipos de variable de C e indica el tipo de variable a la que apunta el puntero.
- El asterisco (*: el mismo asterisco usado para multiplicación) que es un operador de indirección, declara un puntero.
Veamos algunas declaraciones de puntero válidas en este tutorial de punteros en C:
Inicializar un puntero
Después de declarar un puntero, lo inicializamos como variables estándar con una dirección de variable. Si los punteros en la programación C no están sin inicializar y se utilizan en el programa, los resultados son impredecibles y potencialmente desastrosos.
Para obtener la dirección de una variable, usamos el operador ampersand (&), colocado antes del nombre de una variable cuya dirección necesitamos. La inicialización del puntero se realiza con la siguiente sintaxis.
Sintaxis del puntero
pointer = &variable;
A continuación se proporciona un programa simple para la ilustración del puntero:
Salida:
Address stored in a variable p is:60ff08Value stored in a variable p is:10
Operador |
Significado |
* |
Tiene 2 propósitos
- Declaración de un puntero
- Devuelve el valor de la variable referenciada
|
& |
Sirve solo para un propósito
- Devoluciones la dirección de una variable
|
Tipos de punteros en C
A continuación se muestran los diferentes tipos de punteros en C:
Puntero nulo
Podemos crear un puntero nulo asignando un valor nulo durante la declaración del puntero. Este método es útil cuando no tiene ninguna dirección asignada al puntero. Un puntero nulo siempre contiene el valor 0.
El siguiente programa ilustra el uso de un puntero nulo:
#include <stdio.h>int main(){int *p = NULL; //null pointerprintf("The value inside variable p is:\n%x”,p);return 0;}
Salida:
The value inside variable p is:0
Puntero vacío
En la programación en C, un puntero vacío también se llama como puntero genérico. No tiene ningún tipo de datos estándar. Un puntero vacío se crea utilizando la palabra clave void. Puede usarse para almacenar una dirección de cualquier variable.
El siguiente programa ilustra el uso de un puntero vacío:
#include <stdio.h>int main(){void *p = NULL; //void pointerprintf("The size of pointer is:%d\n",sizeof(p));return 0;}
Salida:
The size of pointer is:4
Puntero salvaje
Se dice que un puntero es un puntero salvaje si no se está inicializando a nada. Estos tipos de punteros C no son eficientes porque pueden apuntar a una ubicación de memoria desconocida que puede causar problemas en nuestro programa y puede provocar que el programa se bloquee. Siempre se debe tener cuidado al trabajar con punteros salvajes.
El siguiente programa ilustra el uso del puntero salvaje:
#include <stdio.h>int main(){int *p; //wild pointerprintf("\n%d",*p);return
read more