Einzelnen Beitrag anzeigen
Alt 24.11.2003, 21:20   #2
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

Du sollst ein Zeigerfeld (Pointerarray) sortieren und nicht die Daten !

Es geht schneller ein Feld über 4 Bytes Zeigeradressen (eine 32 Bit Adresse) zu sortieren, als die Datensatz Blöcke a 100 Bytes.

Code:
struct S_student {
char nachname[30],vorname[20],adresse[40],plz[8],ort[35];
long gebdat /* JJJJMMTT */
 ,matnr;
};

struct S_student gd_student[100],*gp_student[100];

for(i=0;i<100;i++)
{
 gp_student[i]= &gd_student[i];
}

/*

 und jetzt über gp_student[i]->matnr auf die Matrikelnummer zugreifen sowie
mittels lokaler Zeigervariable lp_student einen Austausch der Adressen vornehmen,
die Daten bleiben am ursprünglichen Ort.

*/

lp_student= gp_student[i];
gp_student[i]= gp_student[j];
gp_student[j]= lp_student;

/* es wurden nur Adressen vertauscht, Danke für's Gehirn einschalten :) */

Die Ausgabe erfolgt nicht etwa über:

gd_student[i].<member>
sondern über
gp_student[i]-><member>

/* für alle i von 0 bis zur Anzahl der Studenten - 1 (die Anzahl der Studenten ist jedenfalls / muss jedenfalls sein <= 100) */
g steht übrigens für global
l für lokal
das d für daten
das p für pointer

mfg Kikakater
kikakater ist offline   Mit Zitat antworten