# Zeiger auf Array



## Dnh (29. Jun 2018)

Hallo,

folgendes Szenario:


```
int *p, z[10] = {0,1,2,3,4,5,6,7,8,9};

p=z[0];
p=z;
```

Im ersten Fall zeigt p ja auf den Wert des nullten Elements meines Arrays.
Worauf zeigt p im zweiten Fall? Da kein & davorgeschrieben wird, sollte ja auf einen Wert gezeigt werden. Jetzt wird aber ja kein explizites ntes objekt angegeben. Was passiert also?


----------



## fhoffmann (29. Jun 2018)

Dnh hat gesagt.:


> Im ersten Fall zeigt p ja auf den Wert des nullten Elements meines Arrays.


Das stimmt nicht. p etnhält eine Adresse. Und im ersten Fall ist dies die Adresse 0 (weil dies der Wert des ersten Elements des Arrays ist).
Im zweiten Fall enthält p die Adresse des Arrays - und dies ist die Adresse des ersten Elements.


----------



## VfL_Freak (29. Jun 2018)

Moin,
Fall zwei sehe ich genauso!

Fall eins bringt bei mir mit VS2017 diesen Compilerfehler!!
_*Ein Wert vom Typ "int" kann keiner Entität vom Typ "int *" zugewiesen werden
*_
VG Klaus


----------



## fhoffmann (29. Jun 2018)

VfL_Freak hat gesagt.:


> Fall eins bringt bei mir mit VS2017 diesen Compilerfehler!


Du hast recht - man müsste den int in einen int* casten.


----------



## Dnh (29. Jun 2018)

Jetzt bin ich ja noch verwirrter als vorher..

anderes Beispiel:


```
int i = 10, *p;

    p=i;
    printf("%d \n" ,p);
    p=&i;
    printf("%d\n" ,p);
    *p=i;
    printf("%d\n" ,p);
    *p=&i;
    printf("%d" ,p);
```


----------



## Dnh (29. Jun 2018)

Im ersten Fall zeigt p also nicht auf den Wert 10??


----------



## Dnh (29. Jun 2018)

Also mir ist schon klar dass p nicht den wert 10 speichert, aber p zeigt doch auf den Wert der in der Adresse von i gespeichert ist oder nicht?


----------



## Dnh (29. Jun 2018)

Und im zweiten Fall durch das & zeigt p nur auf die Adresse, nicht auf den dort enthaltenen Wert.
Im dritten Fall zeigt p ebenfalls auf die Adresse, nicht den Wert
und im vierten Fall ist es doppelt gemoppelt, entweder verhält es sich wie - * - = + oder es bleibt bei -


----------



## httpdigest (29. Jun 2018)

Dnh hat gesagt.:


> ```
> int i = 10, *p;
> 
> p=i;
> ...




```
int i = 10, *p;
p=i; // <- das hier funktioniert nicht!
```
Du kannst keinen Wert vom Typ int auf eine Variable vom Typ int* zuweisen.
Der Compiler weiß nicht, was du damit meinst.
Du könntest einmal meinen:

```
p=&i;
```
Also: p soll nun die Adresse der Variablen i enthalten (das heißt, NICHT 10, sondern irgendeine Adresse halt).
Oder du meinst:

```
p=(int*)i;
```
Als: p soll nun als Adresse interpretiert, die 10 enthalten. Wenn du p nun also dereferenzierst, dann greifst du damit auf die Adresse 10 (sehr wahrscheinlich illegal) zu und erwartest, dass der Computer dir die int-Zahl, die in dem Speicher in Adresse 10 steht, zurückliefert.


----------



## Dnh (29. Jun 2018)

Achso, ich glaube bei Arrays verhält sich das ganze einfach anders als bei normalen integern. Das erklärt einiges..


----------

