next up previous contents
Siguiente: Apuntadores Subir: Arreglos Anterior: Arreglos multidimensionales   Índice General

Arreglos como argumentos de funciones

Es necesario recordar tres cosas al pasar arreglos como parámetros de funciones:

  1. Todos los arreglos son pasados en llamada-por referencia.
  2. Debido a que el arreglo es pasado en llamada por referencia, sería incorrecto para la función llamada devolver el arreglo en una sentencia return();. Esta sentencia está de más.
  3. Todos los elementos del arreglo son pasados a las funciones en llamada por valor. lo que significa que se pasa una copia del elemento, no la dirección del elemento.

/*
// ereArray.xcode
*/
#include <iostream>
#include <ctype.h>

#define maxArray 5

void ArrayMayuscula(char Array[maxArray]);

int main (int argc, char * const argv[]) {
	int desplazamiento;
	char Array[maxArray]=
	{'a','e','i','o','u'};
	for(desplazamiento=0;desplazamiento<maxArray;
		desplazamiento++)
		std::cout<<Array[desplazamiento];
	std::cout<<"\n";
	ArrayMayuscula(Array);
	for(desplazamiento=0;desplazamiento<maxArray;
		desplazamiento++)
		std::cout<<Array[desplazamiento];
	return 0;
}

void ArrayMayuscula(char Array[maxArray])
{
	for(int desplazamiento=0;desplazamiento<maxArray;
		desplazamiento++)
		Array[desplazamiento]=toupper(Array[desplazamiento]);
	//Aqui return array seria incorrecto
}

La salida del programa demuestra que el arreglo se pasa en llamada por referencia, ya que el primer ciclo for da como salida los contenidos de minúsculas originales: aeiou, mientras que el segundo ciclo for en main() da como salida los contenidos del arreglo después del llamado a la función ArrayMayuscula(): AEIOU.

Claramente, dentro del cuerpo de la función ArrayMayuscula(), ha cambiado el arreglo de regreso en la función main(). el siguiente ejemplo es una simple modificación de este algoritmo, sólo que en vez de pasar el arreglo completo, se pasa cada elemento individual:

/*
// ereArray2.xcode
*/


#include <iostream>
#include <ctype.h>

#define maxArray 5

void ElementosArrayMayuscula(char unChar);

int main (int argc, char * const argv[]) {
	int desplazamiento;
	char Array[maxArray]=
	{'a','e','i','o','u'};
	for(desplazamiento=0;desplazamiento<maxArray;desplazamiento++)
		std::cout<<Array[desplazamiento];
	std::cout<<"\n";
	
	for(desplazamiento=0;desplazamiento<maxArray;desplazamiento++)
		ElementosArrayMayuscula(Array[desplazamiento]);
	
	for(desplazamiento=0;desplazamiento<maxArray;desplazamiento++)
		std::cout<<Array[desplazamiento];
	return 0;
}

void ElementosArrayMayuscula(char unChar)
{
	unChar=toupper(unChar);
}

La salida del programa es:

aeiou
aeiou
valarray has exited with status 0.


next up previous contents
Siguiente: Apuntadores Subir: Arreglos Anterior: Arreglos multidimensionales   Índice General
Abdiel Caceres-Gonzalez Jun-02-2005