AZreferate - Referate und hausaufgaben fur schule.
Referatesuche, Hausarbeiten und Seminararbeiten Kostenlose Online-Dokumente mit Bildern, Formeln und Grafiken. Referate, Facharbeiten, Hausarbeiten und Seminararbeiten findest für Ihre einfache Hausarbeiten.



BetriebstechnikBiographienBiologieChemieDeutschDigitaltechnik
ElectronicaEpochenFertigungstechnikGemeinschaftskundeGeographieGeschichte
InformatikKulturKunstLiteraturManagementMathematik
MedizinNachrichtentechnikPhilosophiePhysikPolitikProjekt
PsychologieRechtSonstigeSportTechnikWirtschaftskunde

Referat ZEIGER - Dynamische Datenstrukturen, "C-typische" Verwendung von Zeigern

informatik referate

informatik referate

C-Maturareferat

ZEIGER

Inhaltsverzeichnis


Grundlagen

"Normale" Objekte

Dynamische Datenstrukturen

"C-typische" Verwendung von Zeigern

VAR-Parameter

Arrays & Zeigerarithmetik in C/C++

Arrays

Zeigerarithmetik

Zeiger auf Zeiger & Zeigerarrays

Zeiger auf Zeiger

Zeiger-auf-Zeiger als VAR-Parameter

Zeigerarrays



Grundlagen

Ein Zeiger (Pointer) ist eine Variable, die als Wert die Adresse einer anderen Variable speichert. In C/C++ ist es möglich, sämtliche Datenstrukturen mit Zeigern zu bearbeiten.

Zeiger können auf

"normale" bzw.

dynamische

Objekte verweisen. Der Unterschied liegt darin, zu welchem Zeitpunkt der benötigte Speicherplatz feststeht. Für normale Variable (int i) wird der Speicherplatz bereits zum Kompilierzeitpunkt festgelegt und reserviert, bei dynamischen Objekten hingegen ist es zum Zeitpunkt der Kompilierung nicht klar, wieviel Speicherplatz benötigt wird, da es höchstwahrscheinlich bei jedem Programmdurchlauf unteschiedlich viel sein wird. Der Speicherplatz wird daher erst zur Laufzeit angefordert und reserviert.

Der Vorteil für dynamische Datenstrukturen sind:

Effizientere und flexiblere Speichernutzung

(Aufbau von komplexen Strukturen: Listen, Bäume)

Nachteil:

komplizierte Algorithmen sind erforderlich

"Normale" Objekte

in C/C++

in Pascal


int x;                      // Def. einer Integer- // Variable


int* pi;   // Def. eines Integer- // Zeigers


pi = &x; // Zuweisung: pi // erhält die Adresse // von x


*pi = 30;               // Zuweisung: x erhält // den Wert 30


In Pascal sind Deklarationen von Zeigern auf dynamische Objekte nicht möglich

Dynamische Datenstrukturen

C

C++

Pascal

typedef struct knoten

Knot;

// Deklaration

Knot* A;

// Anfordern von
// Speicherplatz

A = (Knot *) malloc (sizeof(Knot));

// Zuweisen von Werten

A -> iInfo = 28;

A -> pnext = NULL;

// Freigeben des reservierten
// Speichers

free ( A );

struct knoten

Knot;

// Deklaration

Knot* A;

// Anfordern von
// Speicherplatz

A = new Knot;                                         

// Zuweisen von Werten

A -> iInfo = 28;

A -> pnext = NULL;

// Freigeben des reservierten
// Speichers

delete A;

Type Reczeiger = ^Prec;

Prec = Record

iInfo: integer;

pNext: RecZeiger;

end;

var A: RecZeiger;

new ( A );

A^.iInfo := 28;

A^.pNext := NIL;

dispose ( A );

Verschiedene Arten von dynamische Datenstrukturen:

einfach verkettete Listen

doppelt verkettete Listen

geschlossene Listen

Binärbäume

"C-typische" Verwendung von Zeigern

VAR-Parameter

Da es in C/C++ keine VAR-Parameter gibt, werden sie durch Zeiger emuliert bzw. realisiert, d.h. soll eine Funktion den Wert eines übergebenen Parameters verändern, so wird dieser Funktion die Adresse der zu ändernden Variable übergeben. In der Funktion wird die Adresse mittels eines Zeigers gespeichert respektive auf den Inhalt der Variable zugegriffen.

void tausche ( int* zahl1, int* zahl2 )

void main ( void )

Arrays & Zeigerarithmetik in C/C++

Arrays

Arrays sind konstante Zeiger auf einen Datenblock im Speicher, d.h. der Zeiger kann nicht verändert werden. Bei der Deklaration von einem Array wird Speicher reserviert.

Beispiele:

float v[3];          // ein Array aus 3 floats v[0]v[2]

int a[2][5];         // zwei 5elementige int-Arrays

char* vpc[32];                    // ein Array aus 32 char-Pointern

Beispiel 2:

void main ( void )

Zeigerarithmetik

Arithmetische Operationen (+, -, ++, --, .) mit Zeigern beziehen sich auf die Größe des Datentyps des Pointers. D.h. bei der Addition oder Subtraktion zu oder von einem Pointer verweist dieser auf den um die jeweilige Anzahl von Elementen (bei Integer z.B. 2 Bytes) weiter vorne oder hinten liegenden Speicherplatz. Subtrahiert man zwei Pointer von einander, so ergibt diese Berechnung die Anzahl der Elemente, um die der erste Pointer weiter oben im Speicher verweist.

void main ( void )


Zeiger auf Zeiger & Zeigerarrays

Zeiger auf Zeiger

Ein Zeiger-auf-Zeiger ist ein Zeiger, dessen Inhalt die Adresse einer anderen Zeigervariablen enthält. Der Zeiger, auf den verwiesen wird, kann "verändert" werden, d.h. auf einen anderen Teil des Speichers versetzt werden. Ein Zeiger-auf-Zeiger wird durch ,**' definiert.

Beispiel:

void main ( void )

Zeiger-auf-Zeiger als VAR-Parameter

z.B.:    long strtol (const char* zeichenkette, const char** endptr, int basis)

Zeigerarrays

Stellt ein Array aus lauter Zeigern dar.

Beispiel:

void main (int argc, char* argv [] )                                 // oder: int argc, char** argv



Referate über:


Datenschutz




Copyright © 2024 - Alle Rechte vorbehalten
AZreferate.com
Verwenden sie diese referate ihre eigene arbeit zu schaffen. Kopieren oder herunterladen nicht einfach diese
# Hauptseite # Kontact / Impressum