Modificar variables mediante punteros
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 27 de 63.
Ahora puedes aprovechar el verdadero poder de los punteros: modificar la variable original a través de una función. Cuando pasas un puntero a una función, la función puede usar el operador de desreferencia para cambiar el valor almacenado en esa dirección de memoria.
Dentro de la función, desreferencias el puntero usando el operador * para acceder y modificar el valor de la variable original. Esta técnica se llama 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; // Desreferenciar para modificar el valor original
}
int main() {
int x = 5;
doubleValue(&x); // Pasar 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 potentes posibilidades de programación que el paso por valor simplemente no puede lograr.
Desafío
FácilEscribe un programa en C que demuestre la modificación de variables a través de punteros creando una función que triplique el valor de un entero.
Tu programa debe:
- Crear una función llamada
tripleValueque tome un puntero a un entero como parámetro - Dentro de la función
tripleValue, usar el operador de desreferencia para multiplicar el valor en la dirección de memoria por 3 - Dentro de la función
tripleValue, imprimir el nuevo valor en 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 en el formato:
Original value: [value] - Llamar a la función
tripleValuey pasar la dirección de la variablenumberusando el operador de dirección (address-of) - Después de la llamada a la función, imprimir el valor final de
numberen el formato:Final value: [value]
Tu salida debe demostrar que la función modifica con éxito la variable original a través del puntero:
Original value: 8
Value tripled to: 24
Final value: 24Este desafío demuestra el poder del paso por referencia usando punteros, donde la función puede modificar permanentemente la variable original desreferenciando el puntero y cambiando el valor en esa ubicación de memoria.
Hoja de referencia
Puedes modificar la variable original a través de una función utilizando punteros. Esta técnica se llama paso por referencia porque estás pasando una referencia a la ubicación de la variable en la memoria.
Dentro de la función, desreferencia el puntero utilizando el operador * para acceder y modificar el valor de la variable original:
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Desreferenciar para modificar el valor original
}
int main() {
int x = 5;
doubleValue(&x); // Pasar la dirección de x
// ¡x ahora es 10!
return 0;
}Usa *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.
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
// Imprime el valor original
// 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 Logic & Flow
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 cadenas