|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2005
Città: Milano
Messaggi: 1078
|
[C] Problema puntatori
Ciao a tutti, ho questa struttura dati:
struct a{ int x; int y; float z; }*vett; vett=calloc(100,sizeof(struct a)); Quindi avrò vett[0].z = 55.5 vett[1].z = 43.5 vett[2].z = 62.4 ecc.. Ho bisogno di ordinare vett in base al valore di z (che è un float) usando il mergesort ma non riesco a passare l'indirizzo di vett alla funzione. mergesort((*vett).z,0,n-1); /* Dove n è in numero degli elementi */ Sono sicuro che (*vett).z non va bene (infatti il compilatore mi segnala "Incompatible type for argument 1 of mergesort) ma non so come passare quell'indirizzo alla funzione che si aspetta un vettore di float.
__________________
CPU: AMD Phenom II X4 965 C3 Motherboard: Asrock 980DE3/U3S3 R2.0 Ram: G-Skill F3 CL7 4GB DDR3 1333Mhz Alimentatore: Corsair VX550w Hard-Disk: Samsung SSD EVO 860 500GB - WD Caviar Black 1 TB |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2006
Messaggi: 489
|
Quote:
Codice:
mergesort(*((*vett).z),0,n-1); |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
ma è la funzione mergesort di stdlib.h?
se sì, ti basta scrivere una funzione che confronta, tipo: Codice:
int compare(const void * a, const void *b) { struct a *v1, *v2; v1 = (struct a*)a; v2 = (struct a*)b; if (v1.z == v2.z) { return 0; } else if (v1.z > v2.z) { return 1; } else { return -1; } } Codice:
mergesort(vett, n, sizeof(struct a), compare); |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2005
Città: Milano
Messaggi: 1078
|
Grazie delle risposte, in realtà ho dovuto cambiare il prototipo e la funzione del mergesort in quanto l'errore è concettuale,
vett[] è un vettore di strutture di tipo struct a che è ben diverso da vett[1].z ossia un campo della struttura di tipo float. La funzione mergesort come la qsort() si aspetta un vettore di elementi non un singolo elemento ![]() Grazie ancora per l'aiuto ![]()
__________________
CPU: AMD Phenom II X4 965 C3 Motherboard: Asrock 980DE3/U3S3 R2.0 Ram: G-Skill F3 CL7 4GB DDR3 1333Mhz Alimentatore: Corsair VX550w Hard-Disk: Samsung SSD EVO 860 500GB - WD Caviar Black 1 TB |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:09.