Pasar a función un arreglo con punteros o con el nombre del arreglo como puntero

Iniciado por NOB2014, 9 Junio 2016, 03:02 AM

0 Miembros y 1 Visitante están viendo este tema.

NOB2014

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. -

#include <stdio.h>

void vector_(int *vt );

int main(void) {
int vector[] = {1, 2, 3, 4, 5}, *vt = vector;

vector_(vt);
printf( "\n" );
vector_(vector);

return 0;

}


void vector_(int *vt ){
size_t i;
for( i=0; i<5; i++){
printf("\n %d", *(vt+i));
}
}

Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

geeke

Cita de: NOB2014 en  9 Junio 2016, 03:02 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.

NOB2014

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
         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.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

geeke

Cita de: NOB2014 en  9 Junio 2016, 16:03 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.

Cita de: NOB2014 en  9 Junio 2016, 16:03 PM
¿de qué manera llamarían a la función y como lo recibirían?.-

int f(int array[1000])

Es lo mismo que

int f(int array[])

int f(int *array)

No importa la sintaxis siempre se pasa un puntero