Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 9 Junio 2016, 03:02 am



Título: Pasar a función un arreglo con punteros o con el nombre del arreglo como puntero
Publicado por: NOB2014 en 9 Junio 2016, 03:02 am
Hola, gente.
Les dejo un ejemplo de lo que digo en el enunciado y la pregunta es ¿hay alguna diferencia en hacerlo de una manera u otra?, los consulto porque me parece que en ningún Ej. vi como lo hago en la segunda llamada a la función. -

Código
  1. #include <stdio.h>
  2.  
  3. void vector_(int *vt );
  4.  
  5. int main(void) {
  6. int vector[] = {1, 2, 3, 4, 5}, *vt = vector;
  7.  
  8. vector_(vt);
  9. printf( "\n" );
  10. vector_(vector);
  11.  
  12. return 0;
  13.  
  14. }
  15.  
  16.  
  17. void vector_(int *vt ){
  18. size_t i;
  19. for( i=0; i<5; i++){
  20. printf("\n %d", *(vt+i));
  21. }
  22. }
  23.  
Saludos.


Título: Re: Pasar a función un arreglo con punteros o con el nombre del arreglo como puntero
Publicado por: geeke en 9 Junio 2016, 03:47 am
¿hay alguna diferencia en hacerlo de una manera u otra?

Ambos son equivalentes el primer caso es redundante no es necesario pasar un puntero a un array esto se hace por defecto el array siempre decae a puntero al primer elemento cuando lo pasas como parámetro a una función.

Un saludo.


Título: Re: Pasar a función un arreglo con punteros o con el nombre del arreglo como puntero
Publicado por: NOB2014 en 9 Junio 2016, 16:03 pm
Hola, geeke.
Muchas gracias por ocuparte, las dudas que me quedan ahora son las siguientes:
Si recibo en a la función el arreglo de esta manera
Código
  1.         void vector_(int vector[] );
¿En la función se crearía una copia de todo el arreglo?
Y la otra es, si tendrían un arreglo con 1000 elementos, ¿de qué manera llamarían a la función y como lo recibirían?.-

Saludos.


Título: Re: Pasar a función un arreglo con punteros o con el nombre del arreglo como puntero
Publicado por: geeke en 9 Junio 2016, 17:10 pm
¿En la función se crearía una copia de todo el arreglo?

No el array no es copiado en su totalidad solo una copia del puntero a su dirección.

¿de qué manera llamarían a la función y como lo recibirían?.-

Código
  1. int f(int array[1000])

Es lo mismo que

Código
  1. int f(int array[])

Código
  1. int f(int *array)

No importa la sintaxis siempre se pasa un puntero