Aufgabe 0: Verständnisübung mit Zeigern
Gib an, welche Ausgaben am Bildschirm erscheinen, ohne dass du das Programm laufen lässt.
#include <iostream> //Zusatzbibliothek für Ein- und Ausgaben #include <conio.h> //Zusatzbibliothek für Konsole using namespace std; //Standart-Namensraum wird eingestellt int main(int argc, char** argv) { char *x, *y, *z; char u; x = new char; z = new char; y = z; *x = 'A'; *y = 'B'; cout << *x << endl; cout << *y << endl; cout << *z << endl; u = 'C'; y = &u; *z = 'D'; cout << u << endl; cout << *y << endl; u = 'E'; y = x; x = z; z = &u; *y = 'N'; cout << u << endl; cout << *y << endl; cout << *x << endl; cout << *z << endl; return 0; }
Aufgabe 1: Verständnisübung mit Zeigern
int i=5; int *pi, pj; int *pc, pd;
sollen die folgenden Zuweisungen in einem Programm stehen:
pi=i; pi=&i; *pi=i; *pi=&i; pi=pj; pc=&pd; pi=pc; pd=*pi; *pi=i**pc; pi=0;
Gib an, welche dieser Zuweisungen syntaktisch korrekt sind. Gib außerdem für jeden syntaktisch korrekten Ausdruck den Wert der linken Seite an, wobei die Ergebnisse der zuvor ausgeführten Anweisungen vorausgesetzt werden sollen. Falls die linke Seite ein Zeiger ist, gib den Wert der dereferenzierten Variablen an.
Aufgabe 2: Verständnisübung mit Zeigern
Beschreibe das Ergebnis der folgenden Anweisungen:
int j=10; int* p=&j; *p=17; Memo1->Lines->Add(IntToStr(j)); Memo1->Lines->Add(IntToStr(*p));
Aufgabe 3: Verständnisübung mit Zeigern
Beschreibe das Ergebnis der folgenden Anweisungen:
int* f_retp() { int x=1; return &x; } ... Memo1->Lines->Add(IntToStr(*f_retp()));
Aufgabe 4: Verständnisübung mit Zeigern
Beschreibe für die Funktion
int f(int a, bool b, bool c, bool d) { int* p; int* q; int x=0; if (a==1) { p=0; q=0; } else if (a==2) { p=new int(17); q=new int(18); } else if (a==3) { p=&x; q=&x; } if (b) p=q; if (c) x=*p+*q; if (d) { delete p; delete q; } return x; }
das Ergebnis der Aufrufe:
a) f(0,false,true,true);
b) f(1,false,false,true);
c) f(2,false,true,false);
d) f(2,true,true,true);
e) f(3,true,true,true);
f) f(3,true,true,false);
Aufgabe 5: Verständnisübungen mit Zeigern
pAS2=pAS1; aus und erkläre mit einer Graphik, warum nun beide Ausgaben den gleichen Text liefern.pAS2=pAS1; aus, gib *pAS2 aus, verändere den Text auf den pAS2 zeigt und gib dann *pAS1 aus. Erkläre wieder mit einer Graphik was hier geschieht.AS1,AS2 und weise ihnen einen Text zu. Deklariere zwei weitere Pointervariablen pAS3,pAS4 und lasse sie (mittels Adressoperator) auf jene Speicherbereiche zeigen, die durch die Variablen AS1 und AS2 besetzt werden.pAS1 auf den Speicherinhalt von *pAS2 und den Zeiger pAS2 auf den Speicherinhalt von *pAS1 zeigen.NULL) zeigen und versuche auszugeben, wohin beide Zeiger zielen.
Aufgabe 6: Verständnisübung mit Zeigern
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Pointer1Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; int *pi1, *pi2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) { int zahl1=13,zahl2=17; pi1=&zahl1; *pi2=zahl2; Memo1->Lines->Add("Inhalt des Speicherpatzes auf den pi1 zeigt: "+IntToStr(*pi1)); Memo1->Lines->Add("Inhalt des Speicherpatzes auf den pi2 zeigt: "+IntToStr(*pi2)); } //---------------------------------------------------------------------------