# Array Index um 1 verschieben



## son gohan (20. Juli 2007)

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?


----------



## Turri (20. Juli 2007)

Hallo,

erst alle Elemente um 1 nach hinten schieben und dann dein Element rein.
Solltest eine Schleife bauen die rückwärts läuft.

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


----------



## son gohan (20. Juli 2007)

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?


----------



## deepthroat (20. Juli 2007)

Hi.

Du mußt dir merken wieviele Elemente in dem Array sind und einen Pointer zum Array verwenden:

```
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ß


----------



## RedWing (20. Juli 2007)

Hallo,


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

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


----------



## son gohan (20. Juli 2007)

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.


----------



## deepthroat (22. Juli 2007)

RedWing hat gesagt.:


> Hallo,
> 
> 
> ```
> ...


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ß


----------

