Los punteros son características poderosas de la programación C y C ++. Antes de aprender los punteros, aprendamos sobre las direcciones en la programación C.
Dirección en C
Si tiene una variable var en su programa, &var
le dará su dirección en la memoria.
Hemos usado la dirección varias veces mientras usamos la función scanf()
.
Aquí, el valor ingresado por el usuario se almacena en la dirección de la variable var. Tomemos un ejemplo de trabajo.
Salida
var: 5 address of var: 2686778
Nota: Probablemente obtendrá una dirección diferente cuando ejecute el código anterior.
C Punteros
Los punteros (variables de puntero) son variables especiales que se utilizan para almacenar direcciones en lugar de valores.
Sintaxis de puntero
Así es como podemos declarar punteros.
Aquí, hemos declarado un puntero p de int
tipo.
Usted también puede declarar punteros de estas formas.
Tomemos otro ejemplo de declaración de punteros.
Aquí, hemos declarado un puntero p1 y una variable normal p2.
Asignando direcciones a punteros
Tomemos un ejemplo.
Aquí, se asigna 5 a la variable c. Y, la dirección de c se asigna al puntero de la pc.
Obtener el valor de la cosa apuntada por los punteros
Para obtener el valor de la cosa apuntada por los punteros, usamos *
operador. Por ejemplo:
Aquí, la dirección de c
se asigna al puntero de la PC. Para obtener el valor almacenado en esa dirección, usamos * pc.
Nota: En el ejemplo anterior, pc es un puntero, no *pc
. No puede ni debe hacer algo como *pc = &c
;
Por cierto, *
se llama operador de desreferencia ( cuando se trabaja con punteros). Opera en un puntero y da el valor almacenado en ese puntero.
Cambio de valor señalado por punteros
Tomemos un ejemplo.
Hemos asignado la dirección de c al puntero de pc.
Luego, cambiamos el valor de c a 1. Ya que pc y la dirección de c es lo mismo, *pc
nos da 1.
Tomemos otro ejemplo.
Hemos asignado la dirección de c al puntero de la PC.
Luego, cambiamos *pc
a 1 usando *pc = 1;
. Dado que pc y la dirección de c es la misma, c será igual a 1.
Tomemos un ejemplo más.
Inicialmente, la dirección de c se asigna al puntero de la pc usando pc = &c;
. Como c es 5, *pc
nos da 5.
Luego, la dirección de d se asigna al puntero de la pc usando pc = &d;
. Como d es -15, *pc
nos da -15 .
Ejemplo: Funcionamiento de punteros
Tomemos un ejemplo funcional.
Salida
Address of c: 2686784Value of c: 22Address of pointer pc: 2686784Content of pointer pc: 22Address of pointer pc: 2686784Content of pointer pc: 11Address of c: 2686784Value of c: 2
Explicación del programa
-
int* pc, c;
Aquí , se crea un puntero pc y una variable normal c, ambas de tipoint
.
Dado que pc y c no se inicializan inicialmente, el puntero pc apunta a ninguna dirección o una dirección aleatoria. Y la variable c tiene una dirección pero contiene un valor de basura aleatorio. -
c = 22;
Esto asigna 22 a la variable c. Es decir, 22 se almacena en la ubicación de memoria de la variable c. -
pc = &c;
Esto asigna la dirección de la variable c al puntero pc. -
c = 11;
Esto asigna 11 a la variable c. -
*pc = 2;
Esto cambia el valor en la ubicación de memoria señalada por el puntero pc a 2.
Errores comunes al trabajar con punteros
Supongamos que desea que el puntero pc apunte a la dirección de c. Entonces,
Aquí hay un ejemplo de sintaxis de puntero que los principiantes a menudo encuentran confuso.
¿Por qué no obtuvimos un error cuando usando int *p = &c;
?
Es porque
es equivalente a
En ambos casos, estamos creando un puntero p
(no *p
) y asignándole &c
.
Para evitar esta confusión, podemos usar la declaración como esta:
Ahora que sabe qué son los punteros, aprenderá cómo los punteros están relacionados con las matrices en el siguiente tutorial.