• Viernes 8 de Noviembre de 2024, 19:41

Autor Tema:  Pasar un arreglo completo como parametro de funcion  (Leído 1860 veces)

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Pasar un arreglo completo como parametro de funcion
« en: Viernes 4 de Diciembre de 2009, 00:51 »
0
Hola a toda la comunidad de solocódigo... he pasado la tarde intentando crear una función en C++ que calcule la cantidad de elementos que posee un arreglo.  Tengo la siguiente instrucción:

Código: C++
  1. cantidad = sizeof(v)/sizeof(v[0]);  
  2.  
 

donde v es un arreglo de 5 posiciones.  básicamente divide el tamaño del arreglo entre la primera posición (ya que todas las posiciones deberian tener el mismo tamaño).  La cuestión es que el código se comporta de forma extraña dentro de una funcion.  Tengo la siguiente funcion:

Código: C++
  1. int cantidad(int v[])
  2. {   return sizeof(v)/sizeof(v[0]);    
  3. }
  4.  

Al parecer, pasar un arreglo como parámetro solo envía la primera posicion del arreglo, entonces al dividir es como si estuviera haciendo 1/1=1... Siempre me dará una posición.  Hay alguna forma de capturar todo el arreglo dentro de la función?

NOTA: no quiero pasar un segundo parámetro indicando el número de elementos, la idea es que la función determine eso.  Si esto es imposible, al menos avísenme para no seguir intentando.

Saludos y Gracias
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Pasar un arreglo completo como parametro de funcion
« Respuesta #1 en: Sábado 5 de Diciembre de 2009, 21:32 »
0
Buenas

cuando llamas a esta funcion
int cantidad(int v[])

lo que estas pasando es un puntero a un elemento de un vector de tipo int.


que alguien me corriga si me equivoco..

cuando declaras un variable de tipo array, automaticamente se reserva la memoria para todos los elementos del array, por lo que si usas el operador sizeof siempre te va a dar el tamaño total (siempre que lo uses en el bloque en dodne fue declarado el array) ya que lo que en realidad te devuelve es la cantidad de memoria reservada para la variable.
Quizas exista algun artilugio para resolver eso de la forma que queres, pero una forma que se me ocurre a mi es inicializar el vector con alguna bandera, y luego recorrerlo hasta la primera aparicion, obviamente esto sirve unicamente en caso de que el vector se llene de forma lineal.

No es un gran aporte, pero espero que sirva

Saludos
The sweet smell of a great sorrow lies over the land.


JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Pasar un arreglo completo como parametro de funcion
« Respuesta #2 en: Sábado 5 de Diciembre de 2009, 22:37 »
0
Gracias, he estado considerando eso... Ahora bien, estoy investigando "qué hay en la última posición de un arreglo".... No he encontrado mucha documentación, pero tal vez exista algo que lo diferencie de las demás posiciones.
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...