Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Arrayübergabe an Funktion, Tauschfunktion

Empfohlene Antworten

Veröffentlicht

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

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.

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???

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

Funktioniert jetzt! Danke!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.