| INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO |

Introducción | Contenido | Bibliografía

Introducción
Contenido
UNIDAD I
UNIDAD II
UNIDAD III
UNIDAD IV
UNIDAD V
UNIDAD VI
UNIDAD VII Introducción 7.1 Diseño, implementación y administración de la tabla de símbolos 7.2 Implantación de bloques y tipos de datos 7.3 Especificación de alcance de variables

7.4 Funciones y procedimientos

7.5 Registros de activación

7.6 Paso de parámetros

7.7 Llamada por valor

7.8 Llamada por referencia

UNIDAD VIII
UNIDAD IX
PROBLEMARIO
Bibliografía

7.7 Llamada por valor

> En cierto modo, este es el método más sencillo posible de pasar parámetros. Los parámetros actuales se evalúan y sus valores de lado derecho se pasan al procedimiento llamado. La llamada por valor se usa en C, y generalmente los parámetros se pasan en Pascal de esta manera. Hasta ahora todos los programas han seguido este método para pasar parámetros. La llamada por valor se puede implantar como sigue:

> 1. Un parámetro formal se considera como un nombre local, de modo que las direcciones de memoria para los parámetros formales se encuentran en el registro de activación del procedimiento llamado.

> 2. El procedimiento autor de la llamada evalúa los parámetros actuales y coloca sus valores de lado derecho en las direcciones de memoria de los parámetros formales.

> Una característica distintiva de la llamada por valor es que las operaciones sobre los parámetros formales no afectan a los valores en el registro de activación del autor de la llamada. Si no se tiene en cuenta la palabra clave var. Entonces la llamada permuta(a,b) no modifica los valores de a y b. Con la llamada por valor, el efecto de la llamada permuta(a,b) es equivalente a la secuencia de pasos:

> x := a
> y := b
> temp := x
> x := y
> y := temp

> donde x, y y temp son locales a permuta. Aunque estas asignaciones cambian los valores de las variables locales x, y y temp, las modificaciones no sirven cuando el control retorna de la llamada y se desasigna el registro de activación para permuta. Por tanto, la llamada no afecta al registro de activación del autor de la llamada.

> programa referencia(input, output);
> var a, b: integer;
> procedure permuta(var x, y: integer);
> var temp : integer;
> begin
> temp := x;
> x := y;
> y := temp
> end;
> begin
> a ;= 1; b := 2;
> permuta(a, b);
> wrteln(‘a =’, a); writeln(‘b =’, b)
> end

> Un procedimiento llamado por valor puede afectar a si llamador ya sea a través de nombres no locales o a través de apuntadores que se pasan explícitamente como parámetros. En el siguiente programa en C, x e y son declarados en la línea 2 apuntadores a enteros: el operador & en la llamada permuta(&a,&b) de la línea 8 hace que los apuntadores a a y b se pasen a permuta. El resultado de este programa es:

> a es ahora 2, b es ahora 1

> El uso de apuntadores en este ejemplo sugiere cómo intercambiaría valores un compilador que utilice llamada por referencia.

> permuta(x, y)
> int *x, *y;
> { int temp;
> temp = *x; *x = *y; *y = temp;
> }

> main( )
> { int a = 1, b = 2;
> permuta(&a, &b);
> printf(“a es ahora %d, b es ahora %d\n”, a, b);
> }

> Atrás Siguiente

##### Introducción / Contenido / Unidad I / Unidad II / Unidad III / Unidad IV / Unidad V / Unidad VI / Unidad VII / Unidad VIII / Unidad IX / Problemario / Bibliografía

##### Inicio

##### Créditos

José Sánchez Juárez, Andrés Ortigoza Campos, Fabiola Ocampo Botello