Probleme mit Array-Pointer

Gast #3773810
Lesenswert?
• ▲
▼
Hallo Leute,

irgendwie stehe ich auf dem Schlauch.

Ich will ein Array (bestehend aus uint16 Einträgen) an meine
Bubblesort funktion weiterreichen.

Der Code der Bubblesort-Funktion funktioniert, allerdings nur wenn
er nicht in einer Funktion ausgelagert ist.
Deswegen denke ich, dass das Problem bei der Übergabe des Arrays liegt.

Mein Code:
1
void bubbleSort(uint16_t *table[], uint8_t tableLen){
2
  for(uint8_t f = 0; f < (tableLen - 1); f++){
3
    for(uint8_t s = 0; s < (tableLen - f - 1); s++){
4
      if(*table[s] > *table[s+1]){ // Tauschen
5
        uint16_t temp = *table[s+1];
6
        *table[s+1] = *table[s];
7
        *table[s] = temp;
8
      }
9
    }
10
  }
11
}
12

13
int main(void){
14

15
  uint16_t test[20] = {21436, 3625, 1876, 27, 8799, 51112, 98, 625, 1, 6365, 1982, 12663, 7663, 41228, 8726, 1253, 9817, 1234, 17263, 7671};
16
  bubbleSort(&test, 20);
17

18
[...]
19

20
}

Wenn ich den Code debugge, läuft der uC erst einmal in die erste 
Schleife, macht die zweite zu ende und springt dann ins Nirvana - warum 
auch immer.

Vielleicht weiß jemand, was hier falsch läuft.

Gruß
Gast #3773827
Lesenswert?
• ▲
▼
Stephan schrieb:
> if(*table[s] > *table[s+1]){ // Tauschen
Soll das ein Array aus Pointern auf Integer sein?

Stephan schrieb:
> uint16_t test[20] = {21436, 3625, 1876, 27, 8799, 51112, 98, 625, 1,
> 6365, 1982, 12663, 7663, 41228, 8726, 1253, 9817, 1234, 17263, 7671};
Das ist aber kein Array aus Pointern auf Integer, sondern ein Array aus 
Integern. Wie soll das denn Funktioniert haben als das noch ein einer 
Funktion war?!
#3773853
Lesenswert?
• ▲
▼
Stephan schrieb:
> uint16_t *table[]

Das wäre dann ein Array aus Pointern!

1
 void bubbleSort(uint16_t table[], uint8_t tableLen){
2
   for(uint8_t f = 0; f < (tableLen - 1); f++){
3
     for(uint8_t s = 0; s < (tableLen - f - 1); s++){
4
       if(table[s] > table[s+1]){ // Tauschen
5
         uint16_t temp = table[s+1];
6
         table[s+1] = table[s];
7
         table[s] = temp;
8
       }
9
     }
10
   }
11
 }

Lies nochmal über Arrays in C nach.
uint16_t table[]
Ist bereits ein Pointer, auf das erste Element des übergebenen Arrays!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.