Modificar variables mediante punteros
Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 27 de 63.
Now puedes aprovechar el verdadero poder de los punteros: modificar la variable original mediante una función. Cuando pasas un puntero a una función, la función puede usar el operador de desreferenciación para cambiar el valor almacenado en esa dirección de memoria.
Dentro de la función, desreferencias el puntero mediante el operador * para acceder al valor de la variable original y modificarlo. Esta técnica se denomina paso por referencia porque estás pasando una referencia a la ubicación de la variable en la memoria.
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Dereference to modify the original value
}
int main() {
int x = 5;
doubleValue(&x); // Pasa la dirección de x
// ¡x ahora es 10!
return 0;
}La clave es usar *ptr en el lado izquierdo de la asignación para modificar el valor en la dirección de memoria que contiene el puntero. Esto permite que las funciones cambien permanentemente las variables de la función que las llama, abriendo posibilidades de programación potentes que el paso por valor simplemente no puede lograr.
Desafío
FácilEscribe un programa en C que demuestre cómo modificar variables mediante punteros creando una función que triplique el valor de un entero.
Tu programa debe:
- Crear una función llamada
tripleValueque reciba un puntero a un entero como parámetro - Dentro de la función
tripleValue, usar el operador de desreferenciación para multiplicar por 3 el valor ubicado en la dirección de memoria - Dentro de la función
tripleValue, imprimir el nuevo valor con el formato:Value tripled to: [value] - En la función
main, declarar una variable entera llamadanumbere inicializarla con el valor 8 - Imprimir el valor original con el formato:
Original value: [value] - Llamar a la función
tripleValuey pasar la dirección de la variablenumberusando el operador de dirección - Después de la llamada a la función, imprimir el valor final de
numbercon el formato:Final value: [value]
Tu salida debe demostrar que la función modifica correctamente la variable original mediante el puntero:
Original value: 8
Value tripled to: 24
Final value: 24Este desafío demuestra el poder del paso por referencia mediante punteros, donde la función puede modificar permanentemente la variable original al desreferenciar el puntero y cambiar el valor ubicado en esa posición de memoria.
Pruébalo tú mismo
#include <stdio.h>
// TODO: Escribe tu función tripleValue aquí
int main() {
// TODO: Escribe tu código aquí
// Declara e inicializa la variable number
// Print the original value
// Llama a la función tripleValue
// Imprime el valor final
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenasPractica por tu cuenta: Compilador de C online