Ejercicio 02 — Funcion incrementar(int *p, int delta) que suma delta al entero…

Dificultad: verde · Módulo 07 (Punteros)

Enunciado

Funcion incrementar(int *p, int delta) que suma delta al entero apuntado.

Diagrama de flujo

Diagrama de flujo del ejercicio 02

Cómo se resuelve

Aquí se ve para qué sirven de verdad los punteros: modificar una variable desde dentro de una función. En C los argumentos se pasan por copia, así que si incrementar recibiera un int normal, tocaría solo su copia y el original no cambiaría. Pasando la dirección, sí puede modificar el original.

  • La función recibe int *p: una dirección. Dentro, *p = *p + delta; lee el valor apuntado, le suma delta y lo vuelve a escribir en la misma celda. Ese *p en ambos lados es la clave: opera sobre el valor, no sobre la dirección.
  • En main la llamada es incrementar(&a, 5);. El & es imprescindible: pasas dónde está a, no cuánto vale a.

Trampa habitual: escribir incrementar(a, 5) sin el &. El compilador espera un int * y le das un int, así que darás un warning (o error) de tipos; y si de algún modo compilara, la función no podría cambiar a. Regla mental: si quieres que una función modifique tu variable, pásale su dirección con & y accede dentro con *.

Para practicar — cópialo en Dev-C++

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 02 — PRACTICA (rellena los TODO)
 * Enunciado: Funcion incrementar(int *p, int delta) que suma delta al entero apuntado.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej02_practica.c -o ej02 && ./ej02
 */
 
#include <stdio.h>
 
/*
 * TODO 1: Define la funcion incrementar.
 *         Firma: void incrementar(int *p, int delta)
 *         Dentro: suma delta al valor apuntado por p usando *p
 */
 
int main(void) {
    int a = 10;
    int b = 3;
 
    // TODO 2: Llama a incrementar para sumar 5 a 'a'.
    //         Recuerda pasar la DIRECCION de a, no su valor.
 
    // TODO 3: Llama a incrementar para sumar 5 a 'b'.
 
    // TODO 4: Imprime el resultado con el formato exacto:
    //         "a=10 -> <nuevo valor>"
    //         "b=3  -> <nuevo valor>"
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 07: Punteros
 * Ejercicio 02 — MODELO (resuelto)
 * Enunciado: Funcion incrementar(int *p, int delta) que suma delta al entero apuntado.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej02_modelo.c -o ej02 && ./ej02
 */
 
#include <stdio.h>
 
/* Suma delta al entero apuntado por p */
void incrementar(int *p, int delta) {
    *p = *p + delta;  // modifica la variable original del llamador
}
 
int main(void) {
    int a = 10;
    int b = 3;
 
    incrementar(&a, 5);  // pasamos la direccion; a quedara en 15
    incrementar(&b, 5);  // b quedara en 8
 
    printf("a=10 -> %d\n", a);
    printf("b=3  -> %d\n", b);
 
    return 0;
}

Cómo usarlo

Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.

Conexiones