Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿En una función se pueden declarar arrays vacios[]?

Estas en el tema de ¿En una función se pueden declarar arrays vacios[]? en el foro de C/C++ en Foros del Web. Mi duda es por que en codec block me da error (creo), y en mxdevC++ no me da problemas al poner en una función un ...
  #1 (permalink)  
Antiguo 26/09/2012, 14:34
 
Fecha de Ingreso: julio-2009
Mensajes: 36
Antigüedad: 14 años, 9 meses
Puntos: 0
Pregunta ¿En una función se pueden declarar arrays vacios[]?

Mi duda es por que en codec block me da error (creo), y en mxdevC++ no me da problemas al poner en una función un array vació.
(En C no en C++).

mi_funcion(int array[]){
//...
}


mi_funcion(int array[tamaño del array a recibir]{
//...
}

Mi pregunta es por que vi esto en muchos programas...
int main(int argc, char *argv[]) <el main con un vector vació. :/ yo pensé que no era permitido. (también puede que se pueda por que sea puntero)
  #2 (permalink)  
Antiguo 26/09/2012, 14:48
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 3 meses
Puntos: 46
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

No, no puedes hacer una funcion que reciba por parametro un array sin determinar.

En el main funciona porque lo que pasas por parametro no es un array sino un vector como bien dices.


Saludos.
  #3 (permalink)  
Antiguo 26/09/2012, 15:00
 
Fecha de Ingreso: julio-2009
Mensajes: 36
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Cita:
Iniciado por L3m0n Ver Mensaje
No, no puedes hacer una funcion que reciba por parametro un array sin determinar.

En el main funciona porque lo que pasas por parametro no es un array sino un vector como bien dices.


Saludos.
No es lo mismo??
wikipedia:
En programación, una matriz o vector (llamados en inglés arrays)[...]
  #4 (permalink)  
Antiguo 26/09/2012, 23:15
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Técnicamente un arreglo sin tamaño es exactamente lo mismo que un puntero, sobretodo si es parametro de una función.
La diferencia radica si el arreglo lo pasa como valor(si pones tamaño) o lo pasas como referencia(sin tamaño, o como puntero).

Estos detalles a veces cambian de compilador a compilador.
Lo ideal es nunca pasar arreglos como parametros de una función, sino usar siempre punteros.

Saludos
  #5 (permalink)  
Antiguo 27/09/2012, 08:36
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 3 meses
Puntos: 46
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Ostras lo siento... esto de escribir rapido, queria decir que lo que pasas no es un array sino un puntero como dice Instru.
  #6 (permalink)  
Antiguo 27/09/2012, 13:50
 
Fecha de Ingreso: julio-2009
Mensajes: 36
Antigüedad: 14 años, 9 meses
Puntos: 0
Exclamación Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Cita:
Iniciado por Instru Ver Mensaje
Técnicamente un arreglo sin tamaño es exactamente lo mismo que un puntero, sobretodo si es parametro de una función.
La diferencia radica si el arreglo lo pasa como valor(si pones tamaño) o lo pasas como referencia(sin tamaño, o como puntero).

Estos detalles a veces cambian de compilador a compilador.
Lo ideal es nunca pasar arreglos como parametros de una función, sino usar siempre punteros.

Saludos
????? perdón... pero me re-confundo...
Pensaba que era imposible pasar un array por valor y siempre se pasaba por referencia amenos que se pasara una posición en especifico...
un puntero entiendo que se puede usar como array, y el tamaño se lo da malloc o alguna función similar... o automatico si es
char *hola="Hola mundo"; //de esto ultimo no estoy seguro ;(

  #7 (permalink)  
Antiguo 27/09/2012, 14:52
 
Fecha de Ingreso: julio-2009
Mensajes: 36
Antigüedad: 14 años, 9 meses
Puntos: 0
Exclamación Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Disculpen el doble post...
encontré la respuesta:

main(int argc, char *argv []) <-- C++
main(int argc, char **argv ) <--- C

^^ En C esta totalmente prohibido los array sin tamaño ^^ (pero se pueden simular con punteros)...

Gracias.
  #8 (permalink)  
Antiguo 27/09/2012, 15:19
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 3 meses
Puntos: 46
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Bueno en C tambien es valido char *argv[]. De hecho char **argv es lo mismo que char *argv[].


Saludos
  #9 (permalink)  
Antiguo 27/09/2012, 15:29
 
Fecha de Ingreso: julio-2009
Mensajes: 36
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Cita:
Iniciado por L3m0n Ver Mensaje
Bueno en C tambien es valido char *argv[]. De hecho char **argv es lo mismo que char *argv[].


Saludos
Imposible no existen array sin tamaño en C... pero si en C++ ^^

(no me arruines la vida) :|
  #10 (permalink)  
Antiguo 27/09/2012, 15:39
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 3 meses
Puntos: 46
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

No es un array, char *argv[] es un puntero.
  #11 (permalink)  
Antiguo 27/09/2012, 15:46
 
Fecha de Ingreso: julio-2009
Mensajes: 36
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Cita:
Iniciado por L3m0n Ver Mensaje
No es un array, char *argv[] es un puntero.
Es un array de punteros char... (????)
(un array que almacena punteros char en cada posición).
pero no esta permitido hacer un array sin tamaño en C asi que se sumula con otro puntero... "puntero" a "puntero"
(simula un array de punteros)...


char * <tipo de dato, 4 bytes por ser puntero
argv[] <variable.... que es un array... sin tamaño, algo solo permitido en C++

char * <tipo de dato, 4 bytes por ser puntero
*argv <variable, que es puntero.... para simular un array sin tamaño...

(espero no equivocarme) D:

Estoy casi seguro que estoy bien...
Pero aun tengo la duda con lo de las funciones D:

;(

Bueno es obvio que el problema soy yo... perdón y gracias por las respuestas.

Última edición por m4rc05; 27/09/2012 a las 16:36
  #12 (permalink)  
Antiguo 27/09/2012, 20:03
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
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
  #13 (permalink)  
Antiguo 27/09/2012, 21:14
 
Fecha de Ingreso: julio-2009
Mensajes: 36
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: ¿En una función se pueden declarar arrays vacios[]?

Perfecta respuesta!! Gracias... ahora si se entiende... Llevaba horas buscando la respuesta para los 3 casos.

Etiquetas: arrays, declarar, funcion, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:30.