Zum Inhalt springen

Arrayübergabe an Funktion, Tauschfunktion


Adrenalin88

Empfohlene Beiträge

Hallo zusammen,

hier erstmal der Code:

void selection_sort(int A[],int l,int r)

{

int i,j,min;

for(i=l;i<r;i++)

{

min=i;

for(j=i+1;j<=r;j++)

{

if(A[j]<A[min]) min=j;

}

exchange(A,A[min]);

}

}

Ich muss noch die Funktion exchange erstellen. Aber irgendwie bekomme ich das nicht hin.

Der Compiler gibt immer eine Fehlermeldung aus. Ich dachte mir folgenden Code, aber das klappt leider nicht:

void exchange(int *A,int *B)

{

int temp;

temp=*A;

*A=*B;

*B=temp;

}

Wäre nett, wenn mir einer da weiterhelfen könnte.

Adrenalin88

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, das habe ich mir auch gedacht, dass ich die Adressen der Arrayelemente übergebe.

Nur was ich mich frage ist halt, ob der Funktionsrumpf überhaupt korrekt ist, sprich, muss ich dem Compiler klarmachen, dass es sich hierbei um Arrayelemente handelt also

exchange(int *A[],int *B[]) ??? Ich weiss leider nicht, wie ich dem Compiler klar machen soll, dass es sich um Arrayelemente handelt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja das habe ich mir auch schon gedacht. Aber wenn ich das jetzt folgendermaßen mache:

void exchange(int *a,int *B)

{

int temp;

temp=*a;

*a=*b;

*b=temp;

}

und wie du schon sagtest die Adressen der Arrayelemente übergeben, sprich: exchange(&A,&A[min]);

Dann spuckt der Compiler mir ne Warnung und ne Fehlermeldung aus:

warning C4013: 'exchange' undefiniert; Annahme: extern mit Rückgabetyp int

error C2371: 'exchange': Neudefinition; unterschiedliche Basistypen

Was ist bitte daran falsch???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du verwendest exchange, ohne die Funktion vorher deklariert zu haben. In C nach dem Standard von 1990 ist das erlaubt, aber der Compiler geht dann davon aus, dass die Funktion den Rückgabetyp int hat. Das ist die Warnung.

Im weiteren Verlauf findet der Compiler dann die Funktionsdefinition von exchange, aber da hat sie den Rückgabetyp void. Das passt nicht zur vorausgegangenen (impliziten) Deklaration, daher der Fehler.

Du kannst das verhindern, indem du exchange vor der Verwendung in selection_sort deklarierst:

void exchange(int *A,int *B);[/code]

In diesem einfachen Fall könntest du auch einfach die exchange-Funktion vor die selection_sort-Funktion stellen.

Bearbeitet von Klotzkopp
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...