Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zeiger Feld Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
28.05.2004, 13:47 Uhr
Beginner



Hallo,
habe ein Problem mit folgender Aufgabe. Es geht um einen Zeiger auf einem Feld.
Die Informationen aus meinem C Buch reichen für die Aufgabe nicht aus.

Aufgabenstellung:

Geben Sie die Werte im Feld a und den Wert des Zeigers p am Ende der main Funktion an.

C++:
void main()
{
   int a[5]={2,4,6,8,10};
   int *p=a+2;

   *(p+1)=*(a+2);         /*1*/
   *p++=2;                   /*2*/
   (*p)--;                     /*3*/
   a[4]=a[1]+ *p--;        /*4*/
   *p=5;                       /*5*/


Der Zeiger wird auf das Feld a[2] gestellt.
*(p+1) heißt jetzt dann also, daß der Zeiger um eins erhöht wird bzw. auf ein Element weiter nach rechts im Feld verschoben wird und diesem Element *(a+2) zugewiesen wird?
also habe ich nach der ersten Zeile eigentlich das Feld {2,4,6,6,10}?
Zeile 2:
Der Zeiger zeigt aber immer noch auf (a+2).Erst jetzt wird er durch *p++ auf (a+3) erhöht und dem Wert 2 zugewiesen. Habe ich gedacht ist aber leider falsch. Wer kann mir mal die Zeile 2 und Zeile 3 erklären.

Hier die Lösungswerte aus der Übungsklausur:
Das Feld nach Zeile 2 ist {2,4,2,6,10} p=a+2

das Feld nach Zeile 3 ist {2,4,2,5,10} p=a+3


Viele Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.05.2004, 14:08 Uhr
~Windalf
Gast


zu1)*(p+1)=*(a+2); //da p schon auf das dritte element zeigt(array fängt bei 0 an steht nach der zuweisung im array {2,4,8,8,10}

zu2)*p++=2; muss gestehen weiss ich auch nciht auswendig müsste ich probieren... würde aber sagen das die inncrementierung erst nach der zuweisung passiert.. also p zeigt auf a+3 aber in a[2] steht dann ne 2...

zu 3) das auf das p zeigt wird um 1 erniedrigt

zu4) siehe 2

zu5)das worauf p zeigt ist 5
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.05.2004, 14:16 Uhr
Beginner




Zitat:
~Windalf postete
zu1)*(p+1)=*(a+2); //da p schon auf das dritte element zeigt(array fängt bei 0 an steht nach der zuweisung im array {2,4,8,8,10}




p zeigt zwar auf das dritte element aber p wird doch um eines nach rechts also dann auf a[4] verschoben und dann der wert des dritten elementes ins vierte geschrieben?

also dann sollte doch {2,4,6,6,10} stimmen denke ich für das feld nach der ersten Zeile stimmen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.05.2004, 14:28 Uhr
~Windalf
Gast


äh ja ich hab auf die schnelle bei der zuweisung p+2 statt a+2 gelesen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.05.2004, 15:49 Uhr
Pablo
Supertux
(Operator)


@Beginner: die main Funktion soll int und nicht void sein.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.05.2004, 16:04 Uhr
Beginner




Zitat:
Pablo postete
@Beginner: die main Funktion soll int und nicht void sein.


wieso? hat zwar nichts mit meiner eigentlichen fragestellung zu tun, aber wenn ich kein return habe und keinen wert zurück gebe kann ich doch genauso gut void main() schreiben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.05.2004, 16:18 Uhr
virtual
Sexiest Bit alive
(Operator)


Siehe FAQ
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.05.2004, 16:18 Uhr
~Windalf
Gast


@Pablo
das hat ja lange gedauert.
Ich hatte schon überlegt selber den pablomode anzuschalten aber der witz ist ja mitlerweile stark breitgetreten..

@Beginner...

main sollte ein int zurückliefern weil es der standard so vorschreibt... es gibt kompiler die akzeptieren dein void nicht und wenn möglich sollte man sich immer an den standard halten und nur davon abweichen wenn man wirklichen einen guten grund dazu hat...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.05.2004, 17:21 Uhr
Beginner




Zitat:
~Windalf postete
@Pablo
das hat ja lange gedauert.
Ich hatte schon überlegt selber den pablomode anzuschalten aber der witz ist ja mitlerweile stark breitgetreten..

@Beginner...

main sollte ein int zurückliefern weil es der standard so vorschreibt... es gibt kompiler die akzeptieren dein void nicht und wenn möglich sollte man sich immer an den standard halten und nur davon abweichen wenn man wirklichen einen guten grund dazu hat...



ok ich selbst schreibe die programme ja auch mit int main() da es so im buch steht. bei den übungsklausuren sind sie halt mit void main() angegeben. sind halt vielleicht auch schon älter. hat nicht jemand einen tipp für die zweite zeile?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
28.05.2004, 21:21 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


musst doch nur mal dein array vorher und nachher ausgeben dann weist du das auch selbst...

aber ist so wie ich gesagt habe... das dritte element wird auf 2 gesetzt und danach der zeiger incrementiert...er zeigt dann also aufs 4. element...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: