Ho capito!
Avevo fatto degli errori nell´uso di qsort (sizeof e void):
ecco il codice funzionante:
codice:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _amplitude_index{ // Struct to store and order the values of the amplitudes preserving the index in the original array float amplitude; int index; } t_amplitude_index; int compare_structs (const void *a, const void *b); int main (int argc, const char * argv[]) { int length_array_range = 10; t_amplitude_index *array_amplitudes; array_amplitudes = (t_amplitude_index *) malloc(sizeof(t_amplitude_index) * length_array_range); int i; for(i = 0; i< length_array_range;i++){ array_amplitudes[i].amplitude = (float)i; array_amplitudes[i].index = i; } for(i = 0; i< length_array_range;i++){ printf("array_amplitudes[i].amplitude = %f, array_amplitudes[i].index = %d\n",array_amplitudes[i].amplitude,array_amplitudes[i].index); } qsort(array_amplitudes, length_array_range, sizeof(array_amplitudes[0]), compare_structs); printf("\n\n"); for(i = 0; i< length_array_range;i++){ printf("array_amplitudes[i].amplitude = %f, array_amplitudes[i].index = %d\n",array_amplitudes[i].amplitude,array_amplitudes[i].index); } free(array_amplitudes); return 0; } int compare_structs(const void *a, const void *b){ t_amplitude_index *struct_a = (t_amplitude_index *) a; t_amplitude_index *struct_b = (t_amplitude_index *) b; if (struct_a->amplitude < struct_b->amplitude) return 1; else if (struct_a->amplitude == struct_b->amplitude) return 0; else return -1; }

Rispondi quotando