Pasar punteros a funciones
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 26 de 63.
Ahora que entiendes las limitaciones del paso por valor, exploremos cómo pasar punteros a funciones resuelve este problema. En lugar de pasar una copia del valor de una variable, puedes pasar la dirección de memoria de la variable a la función.
Cuando pasas un puntero a una función, la función recibe acceso a la ubicación en memoria de la variable original. Esto significa que la función puede trabajar directamente con los datos originales, no solo con una copia de los mismos.
void processValue(int *ptr) {
// ptr contiene la dirección de la variable original
// La función ahora puede acceder a esa ubicación de memoria
}
int main() {
int x = 10;
processValue(&x); // Pasar la dirección de x
return 0;
}Observe cómo usamos el operador de dirección & al llamar a la función para pasar la dirección de la variable. El parámetro de la función se declara como int *ptr, lo que indica que espera recibir un puntero a un entero. Esta técnica fundamental abre posibilidades poderosas para que las funciones interactúen con los datos de su programa.
Desafío
FácilEscribe un programa en C que demuestre el paso de punteros a funciones. Tu programa debe:
- Crear una función llamada
displayValueque tome un puntero a un entero como parámetro - Dentro de la función
displayValue, usa el operador de desreferencia para acceder al valor en la dirección de memoria e imprímelo en el formato:Value at address: [value] - En la función
main, declara una variable entera llamadanumbere inicialízala con el valor 42 - Imprime el valor original en el formato:
Original value: [value] - Llama a la función
displayValuey pasa la dirección de la variablenumberutilizando el operador de dirección (address-of) - Después de la llamada a la función, imprime un mensaje de confirmación:
Function call completed
Tu salida debe demostrar que la función recibe y accede con éxito a la dirección de memoria de la variable original:
Original value: 42
Value at address: 42
Function call completedEste desafío introduce el concepto fundamental de pasar punteros a funciones, permitiendo que la función acceda a la ubicación de memoria de la variable original en lugar de trabajar con una copia de su valor.
Hoja de referencia
Al pasar punteros a funciones, la función recibe acceso a la ubicación de memoria de la variable original en lugar de una copia de su valor.
Utilice el operador de dirección & para pasar la dirección de una variable a una función:
void processValue(int *ptr) {
// ptr contiene la dirección de la variable original
// La función ahora puede acceder a esa ubicación de memoria
}
int main() {
int x = 10;
processValue(&x); // Pasar la dirección de x
return 0;
}El parámetro de la función se declara como int *ptr para indicar que espera recibir un puntero a un entero.
Pruébalo tú mismo
#include <stdio.h>
// TODO: Escribe tu función displayValue aquí
int main() {
// TODO: Escribe tu código aquí
// 1. Declarar e inicializar la variable number
// 2. Imprimir el valor original
// 3. Llamar a la función displayValue
// 4. Imprimir el mensaje de finalización
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