Array Index um 1 verschieben

son gohan

Erfahrenes Mitglied
Hallo,

komisch das ich hier nichts dazu gefunden habe in der Suche.

Ich wollte gerne wissen wie man am einfachsten neue Werte in ein Array schreibt, aber so das die alten Werte nicht verloren gehen und immer um 1 nach oben verschoben werden und der neue Wert index [0] hat?
 
Hallo,

erst alle Elemente um 1 nach hinten schieben und dann dein Element rein.
Solltest eine Schleife bauen die rückwärts läuft.
Code:
int arraysize = 10;   // momentane größe
char* deinarray[20];  // 20 Elemente passen rein
...

for(arraysize ; arraysize > 0 ; arraysize--)
{
  deinarray[arraysize+1] = deinarray[arraysize];
}
deinarray[0] = "deinElement";
arraysize++;  // jetzt ist ja ein Element mehr drin

Mal quick and dirty was hingeschrieben.
Ist nur ein Ideenanstoß.

MfG Turri
 
Hallo Turri und vielen Dank für dein Lösungsvorschlag.

So eine Lösung hatte ich schon mal gesehen aber ich dachte das es vielleicht noch etwas einfacher geht, einfacher im Sinne für den Rechner, ich müsste nämlich öfters neue Werte ins Array aufnehmen und die for Schleife jedesmal um die 3000 tausend umdrehungen machen lassen und irgendwie denke ich das es so mit Schleife nicht gerade die beste Lösung ist oder?
 
Hi.

Du mußt dir merken wieviele Elemente in dem Array sind und einen Pointer zum Array verwenden:
C:
void push(int** a, int* sz, int x) {
  ++*sz;
  *--*a = x;
}

int size = 0;
int array[200];
int* a = array + sizeof(array) / sizeof(*array);

push(&a,  3, &size);
push(&a,  5, &size);
push(&a,  8, &size);
push(&a, 13, &size);

int x = a[0];
Dabei musst du natürlich aufpassen, das du nicht über das Array hinaus schreibst.

Gruß
 
Hallo,

C:
void push(int** a, int* sz, int x);

push(&a,  3, &size);
push(&a,  5, &size);
push(&a,  8, &size);
push(&a, 13, &size);

sollte sicher
C:
void push(int** a, int x, int* sz);

push(&a,  3, &size);
push(&a,  5, &size);
push(&a,  8, &size);
push(&a, 13, &size)

heißen. :)

Gruß,
RedWing
 
Hm, war eben nicht erreichbar die Homepage.

Also das muss ich mir wohl auf jedenfall mal genauer ansehen mit den Pointer, ich dachte bis jetzt immer das man nur ein Sternchen setzen kann aber hier sehe ich zum ersten mal zwei auf einmal, aber sowieso muss ich das noch lernen.

Ich lese das bei galileo openbook "C von A-Z" in dem Buch.
 
Hallo,

C:
void push(int** a, int* sz, int x);

push(&a,  3, &size);
push(&a,  5, &size);
push(&a,  8, &size);
push(&a, 13, &size);

sollte sicher
C:
void push(int** a, int x, int* sz);

push(&a,  3, &size);
push(&a,  5, &size);
push(&a,  8, &size);
push(&a, 13, &size)

heißen. :)
Allerdings, ja. :)

Mir fällt gerade auf, dass man nicht unbedingt den Füllstand des Arrays speichern muss, man könnte ihn ja ggf. berechnen.

Gruß
 
Zurück