Pasos de Parámetros

 

Existen dos tipos de pasos de parámetros el primero es llamado paso de parámetros por referencia, por dirección, por variable, por apuntador o por pointer, el segundo es llamado paso de parámetros por valor o por asignación. El primero va y regresa, el segundo solo se pero no regresa.

 

 

Paso de Parámetros por Referencia,

por Dirección,

por Variable,

por Apuntador o

por Pointer.

En el Capítulo 2 tuvimos un programa que consistía en leer la edad, era el c2p03.cpp. Revisemos ahora el siguiente programa c3p07.cpp, consiste en leer también la edad pero usando ahora paso de parámetros, en este caso el parámetro es edad:


#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "iostream.h"
	void lee ( int *edad )
		{
		clrscr ( );
		cout << endl << "Dame tu Edad:    "; cin >> *edad;
		}
void main ( void )
{
int edad;
lee ( &edad );
}

 

Obsérvese que se tiene un asterísco a la hora de declarar el procedimiento que corresponde al void lee ( int *edad ), también obsérvese que tiene un ampersen a la hora de invocar el void, de modo que aparece como lee ( &edad ); ¿Porqué razón se puso el asterisco? ¿Porqué razón se puso el ampersen? Para contestar estas dos preguntas observemos primero que ocurre con el identificador de la variable llamada edad. ¿En qué momento sabemos cuanto vale la edad? ¿Antes de leerla o después?, es obvio que la respuesta es después de haberla leído. Cuando invocamos o aplicamos el void lee, no sabemos cuanto vale edad, así que edad se va, se lee y después se regresa leída. Es la misma razón para explicar porqué cuando en el antiguo lenguaje c aparecía la instrucción scanf ( "%d", &edad ); con el ampersen se indica que se vá edad como parámetro ( para ser leída ) dentro del void scanf y regresa ya leída. Aunque no se tiene la declaración de scanf a la mano, por pertenecer a una librería, este es otro ejemplo de cómo invocar este paso de parámetros llamado por referencia, por variable o por dirección, no estoy seguro si tenga otros nombres. A continuación se muestra un dibujo para indicar el paso de parámetros por referencia, por variable o por dirección de edad:

 

Dentro del void main, se invoca a lee con &edad,

el ampersen está indicando que edad se va a ir, pero va a regresar

y dentro del void lee llega el parámetro *edad,

el asterisco esta indicando que edad llega y después va a regresar.

Es muy importante notar que para hacer paso de parámetros se utiliza la pareja ampersen ( & ) – asterisco ( * ), tan importante como la pareja de Batman y Robin o como la pareja de Pinky y Cerebro o como la de Gil y Luis. Un medio fácil de aprender es el siguiente: al hacer el paso de parámetros por referencia, por dirección, por variable, por apuntador o por pointer ( con los cinco nombres ) es como si le pegásemos en el ojo a la variable (ponerle el &), y al llegar al void, es como si todo el tiempo trajera el ojo morado, a la hora de procesarlo dentro del void (ponerle el *).

 

Revisemos como funcionaría el paso de parámetros en el siguiente programa c3p08.cpp, mismo que consiste en leer edad y después indicar si la edad leída es par ó impar, muy similar al programa c2p05.cpp, pero obviamente usando el paso de parámetros.

 

#include "conio.h"
#include "stdio.h"
#include "iostream.h"

	void lee ( int *edad )
			{
			clrscr ( );
			cout << endl << "Dame tu Edad: "; cin >> *edad;
		}


	void imparopar ( int edad )
		{
			int a;
			a = edad % 2;
			if ( a == 0 )
				{
					cout << endl << edad << " Es Par" << endl;
				}
			else
				{
					cout << endl << edad << " Es Impar" << endl;
				}
		}
void main ( void )
	{
		int edad;

		lee ( &edad );
		paroimpar ( edad );
	}

La primera observación es que la variable edad está declarada dentro del void main, en el Capítulo 2, las variables se declararon inmediatamente después de los include. La segunda observación es más importante y lleva a siguiente pregunta: ¿Porqué en imparopar no lleva ni ampersen ni asterisco? La respuesta nos lleva a proponer el siguiente paso de parámetros.

 

 

 

Paso de Parámetros por Valor o

por Asignación.

 

En el programa anterior tenemos el paso de parámetros por valor en el void imparopar, la variable edad se va del void main, pero no regresa.

 

Dentro del void main, se invoca a imparopar con edad ( sin ampersen ),

sin ampersen está indicando que edad se va a ir, pero no va a regresar

y dentro del void imparopar llega el parámetro edad,

sin asterisco esta indicando que edad llega pero después ya no va a regresar.

 

Tenemos ahora que observar el caso en el que se utiliza el while para repetir la ejecución, esto en el programa c3p09.cpp.

 

#include "conio.h"
#include "stdio.h"
#include "iostream.h"
#include "ctype.h"

	void lee ( int *edad )
		{
			clrscr ();
			cout << endl << "Dame tu Edad: "; cin >> *edad;
		}

	void imparopar ( int edad )
		{
			int a;
			a = edad % 2;

			if ( a == 0 )
				{
					cout << endl << edad << " Es Par" << endl;
				}
			else
				{
					cout << endl << edad << " Es Impar" << endl;
				}
		}
void main ( void )
{
	char respuesta;
	int edad;

	cout << endl << "Desea Comenzar ( s / n )?:    ";
	respuesta = getche ( );
	respuesta = tolower ( respuesta );

	while ( respuesta == 's' )
			{
				lee ( &edad );
				imparopar ( edad );
				cout << endl << "Desea Repetir ( s / n )?:    ";
				respuesta = getche ( );
				respuesta = tolower ( respuesta );
			}
	getch ( );
}

 

El paso de parámetros es totalmente similar que en los dos programas anteriores. Se hace un paso de parámetros por referencia, por dirección o por variable en lee (&edad); y se hace un paso de parámetros por valor o asignación en impaopar (edad); a estas alturas debemos reconocer que getch( ); o que getche( ); no hacen ningún paso de parámetros, por esa razón tiene el paréntesis vacío, esto mismo ocurría en los primeros seis programas donde se dejaban en blanco los paréntesis indicando que no había pasos de parámetros. Lo mismo para clrscr ( ); En el caso de la función que convierte a minúsculas respuesta = tolower ( respuesta ); el paso de parámetros aquí es por valor o asignación, la variable respuesta no regresa; aquí lo que regresa es toda la evaluación de la función. Dentro del void main ( void ) tenemos la palabra void, ¿Qué pasa con el main? ¿Qué significa la palabra void? La respuesta aquí es muy fácil y sencilla, void significa vacío o nulo, es decir, cuando void está entre paréntesis significa que no hay ningún paso de parámetros a la hora de declarar.

 

En el siguiente se pueden observar con mayor detalle más ejemplos de pasos de parámetros. Aunque el capítulo corresponda a Arreglos, se explica también los pasos de parámetros. Pero primero debemos entrar a hacer una revisión de los prototipos.

 

Hosted by www.Geocities.ws

1