December 19, 2024
Cómo Pasar Información por Parámetros en C
El Camino de los Parámetros: Por Valor o Por Referencia
Imagina que quieres enviar un paquete a un amigo. Tienes dos opciones: enviarle una copia del contenido (paso por valor) o simplemente decirle dónde recogerlo (paso por referencia). En C, este concepto aplica directamente:
Paso por Valor
Cuando pasas un valor directamente a una función, esta recibe una copia del dato original. Eso significa que cualquier cambio que se haga dentro de la función no afectará el valor fuera de ella.
Ejemplo:
void incrementar(int x) {
x += 1; // Solo modifica la copia
}
int main() {
int numero = 5;Paso por Referencia
En este caso, no pasas el valor, sino su dirección de memoria (usando punteros). Así, cualquier cambio dentro de la función afectará directamente al valor original.
Ejemplo:
void incrementar(int *x) {
*x += 1; // Modifica el valor original
}
int main() {
int numero Arrays y Strings: El Caso Especial
Los arrays y strings son tratados de forma especial en C. Cuando pasas un array como parámetro, lo que realmente estás pasando es un puntero al primer elemento del array. Esto significa que cualquier cambio dentro de la función afectará al array original.
Ejemplo con Arrays:
void modificarArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
Ejemplo con Strings:
void cambiarPrimeraLetra(char str[]) {
str[0] = 'X'; // Modifica el string original
}
int main() {
Eficiencia y Seguridad al Pasar Parámetros
Cuando trabajes con estructuras grandes o datos sensibles, hay algunas cosas que deberías tener en cuenta:
- Usa punteros para estructuras grandes: Pasar grandes estructuras por valor puede ser costoso. Al usar punteros, solo pasas la dirección, lo que es más eficiente.
- Protege tus datos con
const: Si no quieres que tu función modifique los datos, usaconstpara restringir los cambios.
void imprimirArray(const int arr[], int n) {
for (int i = 0; i < n;- Evita punteros nulos: Siempre verifica que los punteros sean válidos antes de usarlos.
void imprimirValor(int *ptr) {
if (ptr != NULL) {
printf("%d\n", *ptr)Cuando Necesitas Más de un Resultado
A veces necesitas que una función devuelva más de un valor. En estos casos, puedes usar parámetros por referencia para devolver múltiples resultados.
Ejemplo:
void dividir(int a, int b, int *cociente, int *resto) {
*cociente = a / b;
*

Written by Pol Valle
I am particularly drawn to developing applications that are not only functional but also visually appealing and easy to use. I accomplish this by implementing SOLID principles and clean architecture, and applying testing to ensure quality.