Punteros C

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

  1. int* pc, c;

    Aquí , se crea un puntero pc y una variable normal c, ambas de tipo int.
    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.
  2. c = 22;

    Esto asigna 22 a la variable c. Es decir, 22 se almacena en la ubicación de memoria de la variable c.
  3. pc = &c;

    Esto asigna la dirección de la variable c al puntero pc.
  4. c = 11;

    Esto asigna 11 a la variable c.
  5. *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.

Deja una respuesta

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