Ejercicio 01 — Imprimir la dirección y el valor de una variable usando un puntero,…
Dificultad: verde · Módulo 07 (Punteros)
Enunciado
Imprimir la dirección y el valor de una variable usando un puntero, luego modificar el valor a través del puntero.
Diagramas de flujo


Cómo se resuelve
Este ejercicio es la primera toma de contacto con un puntero. Un puntero es una variable que no guarda un valor normal, sino la dirección de memoria donde vive otra variable.
int *p = &n;— el operador&(dirección) devuelve dónde está guardadan, ypla almacena. Léelo como “p es un puntero a int que apunta a n”.printf("Direccion: %p\n", (void *)p);—%pimprime esa dirección en hexadecimal. El cast a(void *)es la forma correcta y portable de pasar un puntero a%p.printf("Valor original: %d\n", *p);— aquí el*es el operador de desreferencia: “dame el valor que hay en la dirección que guarda p”. No confundas la*de la declaración (int *p, que dice “puntero”) con la*de uso (*p, que dice “el valor apuntado”).*p = 100;— escribir a través del puntero cambia la variable original. Comopapunta an,npasa a valer 100 aunque nunca escribamosn = 100.
Trampa habitual: declarar el puntero sin apuntarlo a nada (int *p;) y hacer *p = 100. Ese p contiene basura y escribirías en una dirección aleatoria: comportamiento indefinido. Un puntero siempre debe apuntar a algo válido antes de desreferenciarlo.
Para practicar — cópialo y complétalo
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
* Curso de C — Modulo 07: Punteros
* Ejercicio 01 — PRACTICA (rellena los TODO)
* Enunciado: Imprimir la dirección y el valor de una variable usando un puntero,
* luego modificar el valor a través del puntero.
* Dificultad: verde
* Compilar: gcc -std=c11 -Wall ej01_practica.c -o ej01 && ./ej01
*/
#include <stdio.h>
int main(void) {
int n = 77;
// TODO 1: Declara un puntero a int llamado 'p' y asignale la direccion de n
// Sintaxis: int *p = ...
// TODO 2: Imprime la direccion con printf y el formato %p
// Recuerda hacer cast a (void *) para que %p funcione limpio
// printf("Direccion: %p\n", ...);
// TODO 3: Imprime el valor apuntado con printf y %d
// Usa * para desreferenciar
// printf("Valor original: %d\n", ...);
// TODO 4: Cambia el valor de n a 100 a traves del puntero (no uses n=100)
// *p = ...
// TODO 5: Imprime n directamente para comprobar que cambio
// printf("Valor modificado: %d\n", n);
return 0;
}Solución — cópiala y ejecútala
/*
* Curso de C — Modulo 07: Punteros
* Ejercicio 01 — MODELO (resuelto)
* Enunciado: Imprimir la dirección y el valor de una variable usando un puntero,
* luego modificar el valor a través del puntero.
* Dificultad: verde
* Compilar: gcc -std=c11 -Wall ej01_modelo.c -o ej01 && ./ej01
*/
#include <stdio.h>
int main(void) {
int n = 77;
int *p = &n; // p guarda la direccion de n
printf("Direccion: %p\n", (void *)p); // %p imprime la direccion en hex
printf("Valor original: %d\n", *p); // desreferenciamos: leemos el valor
*p = 100; // modificamos n a traves del puntero
printf("Valor modificado: %d\n", n); // n cambio aunque no escribimos n=100
return 0;
}Ejecútalo en el navegador
▶ Abrir y ejecutar en Compiler Explorer
Se abre con la solución ya cargada; pulsa el botón de ejecutar (Run) para ver la salida. No hay que instalar nada.
Cómo usarlo
Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.