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.
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 :/
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.
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 ) 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
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.
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.