Dumme Frage zu Pointern

Orbit

Erfahrenes Mitglied
Hallo,
warum gibt es einen Fehler wenn ich schreibe:
Code:
	int *pArray = new int[Anzahl];
	for(i =0;i<Anzahl;i++){
		cout<<"Zahl eingeben ";
		cin>>*pArray[i];
	};
Wenn man das Sternchen weglässt gehts ja.
Aber:
Code:
	int *pZahl = new int;
	*pZahl =10;
	cout<<*pZahl;
Das gibt keine Fehlermeldung, wenn man hier das sternchen weglässt kriegt man die Adresse [...]
Unlogisch? oder ich zu dumm?
Frage:
Liegt das am Array?
Weil der Zugriff ist ja eigentlich doch der selbe [?!!]:
Code:
*pArray[i]=10;
Code:
*pZahl =10;
Hier beides mal mit Stern, wobei natürlich [aber warum] beim ersten ne Fehlermeldung rauskommt....
Ich glaub ich bin zu java-fixiert... kann das sein?
mfg,
Orbit
 
Code:
    int Anzahl=10;
    int *pArray;
    pArray = new int[Anzahl];

    for(int i = 0; i < Anzahl; i++){
	cout << "Zahl eingeben ";
	cin >> pArray[i];
    }

    for(int i = 0; i < Anzahl; i++){
	cout << pArray[i];
    }

Versuch es mal mit dem Code .. falls sich der Code nicht von selbst erklärt , dann frag nochmal nach ... !
 
Es gibt einen Fehler weil *p gleich p[0] ist ... in beiden Faellen hast du das erste Feldelement dereferenziert.

* dereferenziert im Normalfall immer das erste Element, ausser du setzt die Adresse im Pointer rauf.

mit *p[] dereferenzierst du das erste Feld im Element eines 2-Dimensionalen Arrays. Was aber vornehmlich bei Stringarrays genutzt wird, soweit mir jetzt bekannt ist.

Wenn du das erste Element (bei Pointern ist das ja meist das einzige) reicht dir der Stern zur Dereferenzierung (also Ausgabe des Wertes, der in der Adresse steht). Bei Feldern (sind ja auch nur Pointer mit Angabe, wielang der Speicherbereich ist) Dereferenziert der * standardmaessig das erste Element p[0]. Willst du andere Elemente derenferenzieren ist es am einfachsten ueber p[ i ] eine Schleife laufen zu lassen, bis du da bist, wo du hinwillst und dann mit den Eckigen Klammern zu dereferenzieren. Du kannst auch die Adresse des pointers staendig veraendern ... was aber sehr umstaendlich ist, weil du dauernd den Stern mitziehen musst und oft nen 2. Array brauchst, weil sobald du die Pointeradresse veraenderst den Bereich davor verlierst ... so gehen schnell Daten verloren, weil man als er evtl nicht mehr im Blick hat, wo das Array jetzt eigentlich wirklich gestartet wurde ...

*p = Pointer oder Startadresse eines Arrays.

p[0] == *p Dereferenzierung auf das erste Arrayelement.

p[][] == *p[] 2dimensionales Array. wobei *p[] auf das erste Feld im []-Arrayfeld zeigt.
 
Zuletzt bearbeitet:
Zurück