Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Noob_boy en 5 Enero 2016, 17:53 pm



Título: No entiendo este error de compilación
Publicado por: Noob_boy en 5 Enero 2016, 17:53 pm
Buenas a todos, pues os explico estaba intentando hacer una función que realice el algoritmo de ordenación burbuja, pero me salta un error de compilación en la línea 5 que no entiendo, dice " invalid type argument of unary '*' (have 'int')"
El código es
Código
  1. #include <stdio.h>
  2.  
  3. void orden(int arr){
  4. int aux,i,j;
  5. int tam=sizeof(arr)/sizeof(*arr);
  6.  
  7. for(i=0;i<tam;i++){
  8. for(j=0;tam-i;j++){
  9. if (arr[j]>arr[j+1]){
  10. aux=arr[j];
  11. arr[j]=arr[j+1];
  12. arr[j+1]=aux;
  13. }
  14. }
  15. }
  16. }
  17.  
  18. int main(){
  19. int vec[]={9,3,5,7,1};
  20. orden(vec);
  21. }

Gracias por adelantado.


Título: Re: No entiendo este error de compilación
Publicado por: ivancea96 en 5 Enero 2016, 17:58 pm
Pusiste "int arr". Querrías decir "int arr[]"


Título: Re: No entiendo este error de compilación
Publicado por: MAFUS en 5 Enero 2016, 21:47 pm
Imprime el valor sizeof arr dentro de la función orden y comparalo con el valor sizeof vec de main, puede que te lleves una sorpresa.
Después, línea 8, donde pone
Código
  1. for(j=0;tam-i;j++){
debe poner
Código
  1. for(j=0;j<tam-i;j++){


Título: Re: No entiendo este error de compilación
Publicado por: Noob_boy en 6 Enero 2016, 16:10 pm
Muchas gracias ivancea96 y MAFUS :), ahora no entiendo porque el tamaño del vector es diferente en la función que en main :-X


Título: Re: No entiendo este error de compilación
Publicado por: MAFUS en 6 Enero 2016, 21:24 pm
Cuando una función recibe como argumento un array, lo que hace C es transformar ese argumento en un puntero. Como ya no se tiene un array -no son objetos iguales, aunque se parecen un poco trabajan de forma diferente- esa información del tamaño ha desaparecido.

Si todavía no has borrado tu programa en la función 'orden' imprime el resultado de sizeof(int*) y compáralo con el sizeof arr.


Título: Re: No entiendo este error de compilación
Publicado por: Noob_boy en 8 Enero 2016, 14:03 pm
ya veo que efectivamente coinciden. Gracias de nuevo por la lección  :D