No entiendo este error de compilación

Iniciado por Noob_boy, 5 Enero 2016, 17:53 PM

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

Noob_boy

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
#include <stdio.h>

void orden(int arr){
int aux,i,j;
int tam=sizeof(arr)/sizeof(*arr);

for(i=0;i<tam;i++){
for(j=0;tam-i;j++){
if (arr[j]>arr[j+1]){
aux=arr[j];
arr[j]=arr[j+1];
arr[j+1]=aux;
}
}
}
}

int main(){
int vec[]={9,3,5,7,1};
orden(vec);
}


Gracias por adelantado.

ivancea96

Pusiste "int arr". Querrías decir "int arr[]"

MAFUS

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
for(j=0;tam-i;j++){
debe poner
for(j=0;j<tam-i;j++){

Noob_boy

Muchas gracias ivancea96 y MAFUS :), ahora no entiendo porque el tamaño del vector es diferente en la función que en main :-X

MAFUS

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

Noob_boy

ya veo que efectivamente coinciden. Gracias de nuevo por la lección  :D