Forum: Mikrocontroller und Digitale Elektronik Probleme mit Array-Pointer


von Stephan (Gast)


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ß

von Peter II (Gast)


Lesenswert?

uint16_t *table[]

damit hast du ein zeiger auf auf ein Array.

verwende mal

uint16_t *table
oder
uint16_t *table[]

von Thomas E. (thomase)


Lesenswert?

Peter II schrieb:
> uint16_t *table
> oder
> uint16_t *table[]

uint16_t table[]

mfg.

von Dr. Sommer (Gast)


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

von Michael A. (micha54)


Lesenswert?

Hallo,

ist das überhaupt ein Bubblesort ?
Müsste nicht die innere Schleife gegenläufig zur äußeren gehen ?

Gruß,
Michael

von Teo D. (teoderix)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.