Pasar punteros a funciones
Parte de la sección Lógica y Flujo 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 cómo pasar punteros a funciones. Tu programa debe:
- Crear una función llamada
displayValueque reciba un puntero a un entero como parámetro - Dentro de la función
displayValue, usar el operador de desreferenciación para acceder al valor en la dirección de memoria e imprimirlo con el formato:Value at address: [value] - En la función
main, declarar una variable entera llamadanumbere inicializarla con el valor 42 - Imprimir el valor original con el formato:
Original value: [value] - Llamar a la función
displayValuey pasar la dirección de la variablenumberusando el operador de dirección - Después de la llamada a la función, imprimir un mensaje de confirmación:
Function call completed
Tu salida debe demostrar que la función recibe y accede correctamente 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, lo que permite 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.
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 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