Ver Mensaje Individual
  #12 (permalink)  
Antiguo 27/09/2012, 20:03
sam90
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Este como este definido un array o puntero (como quieran llamarlo) nunca se pasa por valor. Sino miren este ejemplo:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int f(char p[10]) {
  4.     p[0] = 'a';
  5.     p[1] = '\0';
  6.     return p[6];
  7. }
  8.  
  9. int main()
  10. {
  11. char p[10];
  12.  
  13. f(p);
  14. printf("%s\n", p);
  15. return 0;
  16.  
  17. }

LA funcion f modifica el arreglo y al volver el arreglo esta modificado.
Ahora cual puede ser la diferencia?

Cuando declaramos:

char * p; De esta forma p es un puntero ocupa 4 bytes (32bits) en memoria. Deberia apuntar a un fragmento de memoria.

char p[10]; De esta forma el compilador reserva memoria para 10 char. Si es una funcion lo hace en la memoria volatil. E internamente el compilador lleva el puntero p, pero este no existe en memoria.


Cuando declaramos una funcion:

void f (char * p)
void f (char p[] )

Son exactamente iguales, ambos dos llegan el puntero a la memoria pasada. No se crea copia de nada..

Bueno, Espero que se entienda.

Saludos