Ver Mensaje Individual
  #14 (permalink)  
Antiguo 18/06/2014, 08:50
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Atascado con ejercicio.

Hola Italico76. No es así exactamente, ya que cuando se pasa un array como parámetro, se pasa el puntero al primero elemento del mismo. Entonces, los cambios que se hagan al array dentro de la función, serán permanentes.

Veamos un ejemplo, y de paso le damos un tirón al ejercicio de jscmanuel. Es algo parecido al enunciado, pero un poco a la inversa:
Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool Incrementa (char letras[10]);
  5.  
  6. int main()
  7. {
  8.     char cadena[]="ABCDEFGHIJ";
  9.     //char cadena[]="ABCD5FGHIJ"; //introducimos un caracter numerico en la cadena
  10.     if (Incrementa(cadena))
  11.     {
  12.         cout<<cadena;
  13.     }
  14.     else
  15.     {
  16.         cout<<"La cadena sólo ha de tener letras!";
  17.     }
  18.  
  19.     return 0;
  20. }
  21.  
  22. bool Incrementa (char letras[10])
  23. {
  24.     for (int i=0;i<10;i++)
  25.     {
  26.         if (letras[i]>48 && letras[i]<57)
  27.         {
  28.             return false; //salgo de la función retornando false y sin tocar el array
  29.         }
  30.     }
  31.     //si llego hasta aqui realizo el incremento.....
  32.     for (int i=0;i<10;i++)
  33.     {
  34.         letras[i]=letras[i+1];
  35.     }
  36.     return true;
  37. }

(si comentas la primera version de la cadena y descomentas la segunda, retornará false sin llegar a modificar la cadena usada como parámetro)


Bueno, seguramente te ha llamado la atención la forma de pasar el array, cuando normalmente se hace pasando el puntero de forma explícita.
Esta forma, la de pasar un "array[10]" tendrá problemas si consideramos que siempre vamos a pasar un array de 10 elementos, y luego pasamos uno menor. (El ejercicio contempla la posibilidad de pasar por ejemplo la cadena "12324"), pero eso era para mas adelante, cuando ya hubiera resuelto la cuestión fundamental.

Última edición por dehm; 18/06/2014 a las 09:07 Razón: Aclaración a Italico76