Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C++ (auch C++0x und C++11) ::  Wie sieht das Speicherabbild aus?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Riddick__
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.11.2011
Beiträge: 7
Beitrag Riddick__ Mitglied 10:18:19 01.02.2012   Titel:   Wie sieht das Speicherabbild aus?            Zitieren

Hi,

ich schreibe bald eine Klausur zum Themengebiet C++.
ich habe alte klausuren die ich lerne, jedoch habe ich keine antworten dazu :/

aber in jeder klausur kommen immer 2 aufgaben dran, die vom styl her gleich sind, deswegen wollte ich mich darüber nochmals informieren. (Keine vorlesung mehr oder übung, sonst würde ich den Prof fragen, mit studierende ist auch nicht immer 100%tig richtig )

gegeben is der folgende programmteil:

int n[3]={10,11,12};
int * pn=n;
*(pn+2)=*pn+(pn+1);

Zeichnen sie das Speicherabbild, wie es sich nach der letzten Programmzeile darstellt.

dann habe ich eine tabelle die sieht wie folgt aus

Adresse Speicherinhalt
F00c
F008
F004
F0000

was muss ich tun?


und dann noch:
geben sei die inhalte aller variablen nach Ausführung der jeweiligen Programmzelle in der vorbeireteten tabelle an.

program:
1. int f(int *x, int n)
2. {
3. int z=0;
4. for (z=2; *x<n; z++)
5. *x = *x * z;
6. return z+*x;
7. }
8.
9. void main (void)
10. {
11. int x=1, y=2;
12. y=f(&x,3);
13. }

mein problem ist nur, in z.12 gibt er ja in &x an die funktion.
er übergibt ja mit dem & befehl die adresse.
arbeite ich dann quasi nur mit dem normalen x wert weiter, also 1?
oder muss ich da was beachten?

wäre echt nett wenn da mal einer schnell rüberschauen könnte.

grüße :)
Gugelmoser
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.07.2007
Beiträge: 857
Beitrag Gugelmoser Mitglied 12:45:08 01.02.2012   Titel:   Re: Wie sieht das Speicherabbild aus?            Zitieren

Riddick__ schrieb:

ich schreibe bald eine Klausur zum Themengebiet C++.
zum Themengebiet C.

Riddick__ schrieb:

ich habe alte klausuren die ich lerne, jedoch habe ich keine antworten dazu :/
:D

Riddick__ schrieb:

C/C++ Code:
int n[3]={10,11,12};
int * pn=n;
*(pn+2)=*pn+(pn+1);
C/C++ Code:
int n[3]={10,11,12};
int * pn=n;
*(pn+2)=*pn+(pn+1);
C/C++ Code:
int n[3]={10,11,12};
int * pn=n;
*(pn+2)=*pn+(pn+1);


Zeichnen sie das Speicherabbild, wie es sich nach der letzten Programmzeile darstellt.

dann habe ich eine tabelle die sieht wie folgt aus

Adresse Speicherinhalt
F00c
F008
F004
F0000

Die Aufgabe ist doch nur doof. Ich will ein int nicht in seine einzelnen Bytes aufdröseln. Und das sollte wohl F000 heißen, oder?

Riddick__ schrieb:

geben sei die inhalte aller variablen nach Ausführung der jeweiligen Programmzelle in der vorbeireteten tabelle an.

program:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
 int f(int *x, int n)
 {
 int z=0;
  for (z=2; *x<n; z++)
  *x = *x * z;
  return z+*x;
  }

  void main (void)
  {
 int x=1, y=2;
  y=f(&x,3);
  }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
int f(int *x, int n)
{
int z=0;
for (z=2; *x<n; z++)
*x = *x * z;
return z+*x;
}

void main (void)
{
int x=1, y=2;
y=f(&x,3);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
 int f(int *x, int n)
 {
 int z=0;
  for (z=2; *x<n; z++)
  *x = *x * z;
  return z+*x;
  }

  void main (void)
  {
 int x=1, y=2;
  y=f(&x,3);
  }


mein problem ist nur, in z.12 gibt er ja in &x an die funktion.
er übergibt ja mit dem & befehl die adresse.
arbeite ich dann quasi nur mit dem normalen x wert weiter, also 1?
oder muss ich da was beachten?
Das einzige, das das Porgramm ausgibt, ist ein Compilerfehler, weil es void main nicht gibt. Aber gut, nehmen wir an es wäre int main. Dann hast Recht. Die Funktion f bekommt die Adresse der Variablen x übergeben und somit greifst du in f auf sie zu und änderst ihren Wert. Ja, dein Prof. will halt, dass du weißt, dass sich nach Abarbeitung der Funktion f die Variable x verändert hat.
Hacker
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2011
Beiträge: 1855
Beitrag Hacker Mitglied 15:13:42 01.02.2012   Titel:              Zitieren

Nur, falls es dich noch interessiert:

C/C++ Code:
int n[3]={10,11,12};//Array, 3 Werte lang, jeweils 10, 11 und 12

int * pn = n;//Zeiger wird kopiert, pn und n zeigen jetzt auf obiges Array

* ( pn + 2) = * pn + ( pn + 1); //Das Dritte Array-Element wird auf 10 + pn + 1 gesetzt
C/C++ Code:
int n[3]={10,11,12};//Array, 3 Werte lang, jeweils 10, 11 und 12

int * pn = n;//Zeiger wird kopiert, pn und n zeigen jetzt auf obiges Array

* ( pn + 2) = * pn + ( pn + 1); //Das Dritte Array-Element wird auf 10 + pn + 1 gesetzt
C/C++ Code:
int n[3]={10,11,12};//Array, 3 Werte lang, jeweils 10, 11 und 12

int * pn = n;//Zeiger wird kopiert, pn und n zeigen jetzt auf obiges Array

* ( pn + 2) = * pn + ( pn + 1); //Das Dritte Array-Element wird auf 10 + pn + 1 gesetzt


Jetzt ist folgendes wichtig:
C/C++ Code:
   A[5]     = 5[A]
 = *(A + 5) = *(5 + A);
C/C++ Code:
A[5] = 5[A]
= *(A + 5) = *(5 + A);
C/C++ Code:
   A[5]     = 5[A]
 = *(A + 5) = *(5 + A);


Jetzt interessiert nur noch pn, welches ja ein (AFAIK) zufälliger Speicher-Adressen Wert ist;

Die Tabelle sieht also folgendermaßen aus.

Code:
10
11
pn + 11
Code:
10
11
pn+ 11
Code:
10
11
pn + 11


Edit: Oben ist wahrscheinlich nicht * pn + ( pn + 1) sondern * pn + *( pn + 1) (ja, da gibt's einen Unterschied :D ) gemeint. Sonst gibt's einen Compiler-Error wegen falscha Casts, sonst geht das aber auch mit reinterpret_cast.

_________________
Wenn du kein IPhone hast, ... dann hast du was anderes.


Zuletzt bearbeitet von Hacker am 15:17:46 01.02.2012, insgesamt 3-mal bearbeitet
314159265358979
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.03.2010
Beiträge: 4623
Beitrag 314159265358979 Mitglied 19:27:37 01.02.2012   Titel:   Re: Wie sieht das Speicherabbild aus?            Zitieren

Riddick__ schrieb:
Zeichnen sie das Speicherabbild, wie es sich nach der letzten Programmzeile darstellt.

"error: '::main' must return 'int'"
C/C++ Forum :: C++ (auch C++0x und C++11) ::  Wie sieht das Speicherabbild aus?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.