<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Pointer</id>
	<title>Pointer - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Pointer"/>
	<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Pointer&amp;action=history"/>
	<updated>2026-05-09T11:24:22Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in dev.kaibel.net</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://dev.kaibel.net/index.php?title=Pointer&amp;diff=44&amp;oldid=prev</id>
		<title>PhilKa: Die Seite wurde neu angelegt: „= Pointer (C) =  Ein &#039;&#039;&#039;Pointer&#039;&#039;&#039; (deutsch: *Zeiger*) ist ein spezieller Variablentyp in der Programmiersprache C, der nicht direkt einen Wert, sondern die &#039;&#039;&#039;Speicheradresse&#039;&#039;&#039; einer anderen Variablen speichert.   Pointer sind ein zentrales Konzept in C, da sie direkten Zugriff auf den Speicher ermöglichen und in vielen Bereichen wie Arrays, Funktionen, dynamischer Speicherverwaltung und Strukturen verwendet werden.  == Grundprinzip == Jede Variable in…“</title>
		<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Pointer&amp;diff=44&amp;oldid=prev"/>
		<updated>2025-10-17T14:13:18Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Pointer (C) =  Ein &amp;#039;&amp;#039;&amp;#039;Pointer&amp;#039;&amp;#039;&amp;#039; (deutsch: *Zeiger*) ist ein spezieller Variablentyp in der Programmiersprache C, der nicht direkt einen Wert, sondern die &amp;#039;&amp;#039;&amp;#039;Speicheradresse&amp;#039;&amp;#039;&amp;#039; einer anderen Variablen speichert.   Pointer sind ein zentrales Konzept in C, da sie direkten Zugriff auf den Speicher ermöglichen und in vielen Bereichen wie Arrays, Funktionen, dynamischer Speicherverwaltung und Strukturen verwendet werden.  == Grundprinzip == Jede Variable in…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Pointer (C) =&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Pointer&amp;#039;&amp;#039;&amp;#039; (deutsch: *Zeiger*) ist ein spezieller Variablentyp in der Programmiersprache C, der nicht direkt einen Wert, sondern die &amp;#039;&amp;#039;&amp;#039;Speicheradresse&amp;#039;&amp;#039;&amp;#039; einer anderen Variablen speichert.  &lt;br /&gt;
Pointer sind ein zentrales Konzept in C, da sie direkten Zugriff auf den Speicher ermöglichen und in vielen Bereichen wie Arrays, Funktionen, dynamischer Speicherverwaltung und Strukturen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Grundprinzip ==&lt;br /&gt;
Jede Variable in C wird im Speicher abgelegt. Ein Pointer enthält die Adresse dieses Speicherorts.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int a = 5;&lt;br /&gt;
int* p = &amp;amp;a;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; ist eine normale Variable vom Typ &amp;#039;&amp;#039;&amp;#039;int&amp;#039;&amp;#039;&amp;#039; mit dem Wert &amp;#039;&amp;#039;&amp;#039;5&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;amp;a&amp;#039;&amp;#039;&amp;#039; ist die Speicheradresse von &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;#039; ist ein Pointer, der auf &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; zeigt  &lt;br /&gt;
&lt;br /&gt;
== Deklaration ==&lt;br /&gt;
Die Syntax zur Deklaration eines Pointers lautet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
Datentyp* pointer_name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int* p;       // Zeiger auf int&lt;br /&gt;
char* c;      // Zeiger auf char&lt;br /&gt;
float* f;     // Zeiger auf float&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operatoren ==&lt;br /&gt;
C stellt zwei spezielle Operatoren für Pointer bereit:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;amp;&amp;#039;&amp;#039;&amp;#039; (Adressoperator)  &lt;br /&gt;
  Liefert die Adresse einer Variablen.  &lt;br /&gt;
  Beispiel:  &lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  int a = 10;&lt;br /&gt;
  int* p = &amp;amp;a; // p erhält die Adresse von a&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;*&amp;#039;&amp;#039;&amp;#039; (Dereferenzierungsoperator)  &lt;br /&gt;
  Greift auf den Wert zu, auf den der Zeiger zeigt.  &lt;br /&gt;
  Beispiel:  &lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  printf(&amp;quot;%d&amp;quot;, *p); // gibt den Wert 10 aus&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispielprogramm ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int x = 42;&lt;br /&gt;
    int* ptr = &amp;amp;x;&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Wert von x: %d\n&amp;quot;, x);&lt;br /&gt;
    printf(&amp;quot;Adresse von x: %p\n&amp;quot;, (void*)&amp;amp;x);&lt;br /&gt;
    printf(&amp;quot;Wert von ptr: %p\n&amp;quot;, (void*)ptr);&lt;br /&gt;
    printf(&amp;quot;Wert auf den ptr zeigt: %d\n&amp;quot;, *ptr);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mögliche Ausgabe:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Wert von x: 42&lt;br /&gt;
Adresse von x: 0x7ffee4d1b8ac&lt;br /&gt;
Wert von ptr: 0x7ffee4d1b8ac&lt;br /&gt;
Wert auf den ptr zeigt: 42&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pointer und Arrays ==&lt;br /&gt;
In C sind Arrays und Pointer eng miteinander verbunden.  &lt;br /&gt;
Der Name eines Arrays entspricht der Adresse seines ersten Elements:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int arr[3] = {1, 2, 3};&lt;br /&gt;
int* p = arr;&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;, *p);     // 1&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;, *(p+1)); // 2&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;, *(p+2)); // 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pointer und Funktionen ==&lt;br /&gt;
Pointer können als Funktionsparameter verwendet werden, um auf Werte außerhalb der Funktion zuzugreifen oder sie zu verändern (Call by Reference).&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void verdoppeln(int* zahl) {&lt;br /&gt;
    *zahl = *zahl * 2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int x = 10;&lt;br /&gt;
    verdoppeln(&amp;amp;x);&lt;br /&gt;
    printf(&amp;quot;x = %d\n&amp;quot;, x); // Ausgabe: 20&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Null-Pointer ==&lt;br /&gt;
Ein Pointer, der auf keine gültige Adresse zeigt, wird als &amp;#039;&amp;#039;&amp;#039;Null-Pointer&amp;#039;&amp;#039;&amp;#039; bezeichnet.  &lt;br /&gt;
Er wird mit dem Makro &amp;#039;&amp;#039;&amp;#039;NULL&amp;#039;&amp;#039;&amp;#039; aus der Header-Datei `&amp;lt;stddef.h&amp;gt;` oder `&amp;lt;stdio.h&amp;gt;` dargestellt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int* p = NULL;&lt;br /&gt;
if (p == NULL) {&lt;br /&gt;
    printf(&amp;quot;Pointer zeigt auf nichts.\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pointer-Arithmetik ==&lt;br /&gt;
Pointer können um ganze Zahlen verschoben werden.  &lt;br /&gt;
Dabei wird die Adresse um die Größe des Datentyps verändert, auf den sie zeigen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int arr[3] = {10, 20, 30};&lt;br /&gt;
int* p = arr;&lt;br /&gt;
p++; // zeigt jetzt auf arr[1]&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;, *p); // Ausgabe: 20&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wichtige Hinweise ==&lt;br /&gt;
* Falsche oder uninitialisierte Pointer können zu Abstürzen (&amp;#039;&amp;#039;Segmentation Fault&amp;#039;&amp;#039;) führen.  &lt;br /&gt;
* Speicher, der mit &amp;#039;&amp;#039;&amp;#039;malloc()&amp;#039;&amp;#039;&amp;#039; angefordert wird, muss mit &amp;#039;&amp;#039;&amp;#039;free()&amp;#039;&amp;#039;&amp;#039; wieder freigegeben werden.  &lt;br /&gt;
* Pointer sollten immer entweder auf gültige Adressen oder auf &amp;#039;&amp;#039;&amp;#039;NULL&amp;#039;&amp;#039;&amp;#039; zeigen.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[malloc (C-Funktion)]]&lt;br /&gt;
* [[free (C-Funktion)]]&lt;br /&gt;
* [[memset (C-Funktion)]]&lt;br /&gt;
* [[Arrays (C)]]&lt;br /&gt;
* [[Call by Reference]]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
* ISO/IEC 9899:2018 (C18) – Programming Language C  &lt;br /&gt;
* Kernighan, Brian W.; Ritchie, Dennis M.: &amp;#039;&amp;#039;The C Programming Language&amp;#039;&amp;#039;. Prentice Hall, 1988.  &lt;br /&gt;
* GNU C Library Documentation&lt;/div&gt;</summary>
		<author><name>PhilKa</name></author>
	</entry>
</feed>