elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Solucionado] Duda con paso de un array a una función.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] Duda con paso de un array a una función.  (Leído 2,258 veces)
Caster


Desconectado Desconectado

Mensajes: 787


Ver Perfil WWW
[Solucionado] Duda con paso de un array a una función.
« en: 17 Julio 2013, 17:33 pm »

Buenas, he estado leyendo sobre arrays y punteros en C y he leido no es obligatorio pasar todo el array a una funcion sino que se puede pasar solo una parte, por ejemplo:

Código
  1. #include <stdio.h>
  2.  
  3. void procesar(float z[]);
  4.  
  5. int main()
  6. {
  7.    float z[100];
  8.  
  9.    /*...codigo...*/
  10.  
  11.    procesar(&z[50]);
  12.  
  13.    /*...codigo...*/
  14.    return 0;
  15. }
  16.  
  17. void procesar(float *f)
  18. {
  19.    /*...codigo..*/
  20.    return 0;
  21. }

En este ejemplo, z es un array de 100 elementos pero en la funcionar procesar() solo se utilizaran a partir del elemento numero 50 en adelante, y la duda que me surge es, si yo solo quiero utilizar los 50 primeros elementos, es decir, desde el elemento z[0] hasta el elemento z[49], como lo indicaría en la llamada a la función.

la unica manera que se me ha ocurrido seria asi:

Código
  1. procesar(&z[100-51])
Saludos


« Última modificación: 18 Julio 2013, 13:15 pm por Caster » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda con paso de un array a una función.
« Respuesta #1 en: 17 Julio 2013, 17:44 pm »

Por partes:

Código
  1. float z[100];

En esa línea estás creando un vector de floats... has de saber que cada float, por si mismo, no sabe nada de su entorno:

* No sabe que pertenece a un vector
* No sabe qué posición ocupa.
* No sabe cual es el elemento anterior ( si tiene ).
* No sabe cual es el elemento siguiente ( si tiene ).

La única forma de saber el orden del vector es mediante el vector z.

Este coñazo te lo explico porque ahora, en esta línea:

Código
  1. procesar(&z[50]);

Estás pasando la posición de memoria donde se encuentra el elemento número 50 del vector... pero claro... ese elemento no tiene ni idea de lo que tiene a su alrededor... es un simple puntero a un float.

Si quieres que tu función recorra un número de elmentos consecutivos tienes que indicar la posición inicial dentro del vector y la final... la primera te servirá para saber dónde empezar el recorrido y la segunda para saber cuándo has terminado.

Dicho con código... tu llamada tendría que tener, por ejemplo, esta forma:

Código
  1. procesar(&z[50], &z[99]);

Le pasas el primer elemento de la secuencia, es decir, el 51 ( recuerda que los índices empiezan a contar desde el 0 ), y el último el 100.

Y la función tendría que tener una cabecera tal que...

Código
  1. void procesar( float* f_ini, float* f_fin )

Y ahí ya tienes todo lo necesario para trabajar... solo tienes que ir incrementando el puntero f_ini hasta que coincida con f_fin y listo.

Recuerda que f_fin también forma parte del array... por lo que también has de procesarlo.

Y luego tienes la opción b... que es pasar el puntero a la primera posición a procesar dentro del vector y a la vez el número de elementos a procesar:

Código
  1. // ...
  2. procesar( &z[50], 50 );
  3. // ...
  4.  
  5. void procesar( float* f, int longitud )
  6. {
  7.  // ...
  8. }

En este caso tendrás que llevar tú la cuenta del número de incrementos en el puntero f para no pasarte.



En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con paso de un array a una función.
« Respuesta #2 en: 17 Julio 2013, 19:08 pm »

Buenas, he estado leyendo sobre arrays y punteros en C y he leido no es obligatorio pasar todo el array a una funcion sino que se puede pasar solo una parte, por ejemplo.
Los arrays no se pasan como parámetro a una función, en su lugar se pasa un puntero a su primer elemento (todo esto de forma transparente para ti).

Eso quiere decir, que da igual que uses 10,20,30 elementos... No estás copiando el array asi que en cuestión de rendimiento te da igual.

Otra cosa esque le pases otro parámetro para orientarte cuantos elementos son... Ese es el método que te ha propuesto eferion.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Caster


Desconectado Desconectado

Mensajes: 787


Ver Perfil WWW
Re: Duda con paso de un array a una función.
« Respuesta #3 en: 17 Julio 2013, 22:24 pm »

Por partes:

Código
  1. float z[100];

En esa línea estás creando un vector de floats... has de saber que cada float, por si mismo, no sabe nada de su entorno:

* No sabe que pertenece a un vector
* No sabe qué posición ocupa.
* No sabe cual es el elemento anterior ( si tiene ).
* No sabe cual es el elemento siguiente ( si tiene ).

La única forma de saber el orden del vector es mediante el vector z.


No entiendo muy bien por que me dices esto, no entiendo que tiene que ver una cosa con la otra. A ver si lo entiendo, me estas queriendo decir que como cada float no sabe que pertenece a un vector y tampoco sabe su ubicacion, tengo que indicar la primera posicion desde la que quiero empezar, y la final donde quiero terminar?

Los arrays no se pasan como parámetro a una función, en su lugar se pasa un puntero a su primer elemento (todo esto de forma transparente para ti).
Perdón, me he expresado mal, ya se que es un puntero a la direccion del primer elemento y a partir de ahi se accede a los demas por desplazamiento lineal, lo que queria decir es que no es obligatorio acceder siempre a partir del primer elemento, sino que se puede desde cualquiera elemento del array.

Saludos
« Última modificación: 17 Julio 2013, 22:28 pm por Caster » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda con paso de un array a una función.
« Respuesta #4 en: 17 Julio 2013, 23:41 pm »

Estaba un poco ofuscado cuando te escribí y creo que no fui lo suficientemente claro, perdón.

Lo que quería decir es que al final tienes que trabajar con posiciones de memoria puras y duras... si quieres que una función procese un vector de cualquier longitud necesita una posición de memoria por la que comenzar y una de dos, o bien una posición de memoria en la que terminar, o bien el número de elementos.

Pero lo que está claro es que, con solo una posición de memoria no hay forma de saber en qué punto has de terminar de procesar elementos, siempre necesitarás algo que te diga cuándo terminar.
En línea

Caster


Desconectado Desconectado

Mensajes: 787


Ver Perfil WWW
Re: Duda con paso de un array a una función.
« Respuesta #5 en: 18 Julio 2013, 00:08 am »

Entonces el codigo que puse esta bien o no?
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda con paso de un array a una función.
« Respuesta #6 en: 18 Julio 2013, 00:37 am »

como ha quedado tu código ahora??
En línea

Caster


Desconectado Desconectado

Mensajes: 787


Ver Perfil WWW
Re: Duda con paso de un array a una función.
« Respuesta #7 en: 18 Julio 2013, 00:43 am »

No es ningun codigo completo, era un ejemplo copiado exactamente del libro, que me lo explicaba asi, lo que ahora quiero saber es si es obligatorio saber la posicion final del array, porque segun me explica el libro y como muestra el ejemplo que puse, solo hace falta la posicion de partida.

Saludos
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda con paso de un array a una función.
« Respuesta #8 en: 18 Julio 2013, 01:25 am »

Si por defecto solo vas a gestionar un numero conocido y fijo de elementos, 20 por ejemplo, no necesitas nada más que el puntero al principio del vector de elementos... pero si el número es, a priori, aleatorio... necesitas conocer el final.

Es como seguir un camino... si no sabes cual es el final no puedes saber si has llegado por mucho que andes
En línea

Caster


Desconectado Desconectado

Mensajes: 787


Ver Perfil WWW
Re: Duda con paso de un array a una función.
« Respuesta #9 en: 18 Julio 2013, 11:38 am »

Vale, todo solucionado entonces, muchas gracias.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado] Duda funcion mail(); y hotmail
PHP
Dosjota 6 8,126 Último mensaje 1 Julio 2009, 05:57 am
por Dosjota
=javascript= Duda sobre funcion substring (subStr) (SOLUCIONADO)
Java
CloudswX 3 6,932 Último mensaje 28 Abril 2011, 15:44 pm
por Debci
Duda con sentencia anidada en un array bidimensional(Solucionado)
Programación C/C++
The Last Hero 3 2,488 Último mensaje 15 Mayo 2011, 19:30 pm
por The Last Hero
Pasar un array por una función
PHP
dimitrix 8 3,156 Último mensaje 19 Junio 2011, 22:47 pm
por cassiani
[SOLUCIONADO] Array pasado por referencia a una función no se modifica
Programación C/C++
HastatusXXI 1 905 Último mensaje 1 Noviembre 2016, 13:21 pm
por araes
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines