Adressen

Das folgende Programm ermittelt die Adressen einiger Variablen und gibt die Adressen am Bildschirm aus. Die Adresswerte sind abhängig vom verwendeten System.

 

/* zeiger1.c Demo zu Adresse
   Der Adressoperator & liefert die Adresse einer Variablen
   Fuer die Ausgabe von Adressen gibt es die Umwandlung %p,
   die Adresswerte werden dann als HEX-Zahlen dargestellt.
   Die Adresswerte koennen aber auch mit der Umwandlung %u
   (fuer ganze positive Zahlen) ausgegeben werden.
   Der GNU-Compiler reagiert (zurecht) auf %u mit einer Warnung 
*/

#include <stdio.h>

void main (void)
{
  int   a, b, c;
  float x, y, z;
  double v[20];
  int i;

  printf("Adressen der Variablen im Speicher\n");
  printf("------------------------------------------------\n");
  printf("&a    = %u  (%p)\n", &a, &a);
  printf("&b    = %u  (%p)\n", &b, &b);
  printf("&c    = %u  (%p)\n", &c, &c);
  printf("&x    = %u  (%p)\n", &x, &x);
  printf("&y    = %u  (%p)\n", &y, &y);
  printf("&z    = %u  (%p)\n", &z, &z);
  printf("&i    = %u\n", &i);
  printf("%s%s%s",
    "\nDie Elemente eines Vektors sind hintereinander\n", 
    "in aufsteigender Reihenfolge angeordnet\n",
    "------------------------------------------------\n");
  for (i = 0; i < 5; i++) {
    v[i] = 0.1*i;   /* den einelnen Elementen einen Wert zuordnen */
    printf("Index %1d Adresse: %u  Inhalt: %6.2f\n", i, &v[i], v[i]);
  }
  printf(
    "------------------------------------------------\n");
  printf("v hat als Wert die Anfangsadresse des Vektors\n");
  printf("v = &v[0] = %u\n\n", v);

  printf("%s%s",
    "Auch main hat eine Adresse:\n",
    "------------------------------------------------\n");
  printf("&main = %u\n", &main);
  printf(" main = %u\n", main);

  getchar();

}

Eine Ausführung des Programmes ergibt z.B.:

Adressen der Variablen im Speicher
------------------------------------------------
&a    = 1245100  (0012FFAC)
&b    = 1245096  (0012FFA8)
&c    = 1245092  (0012FFA4)
&x    = 1244928  (0012FF00)
&y    = 1244920  (0012FEF8)
&z    = 1244916  (0012FEF4)
&i    = 1244924

Die Elemente eines Vektors sind hintereinander
in aufsteigender Reihenfolge angeordnet
------------------------------------------------
Index 0 Adresse: 1244932  Inhalt:     0.0
Index 1 Adresse: 1244940  Inhalt:     0.1
Index 2 Adresse: 1244948  Inhalt:     0.2
Index 3 Adresse: 1244956  Inhalt:     0.3
Index 4 Adresse: 1244964  Inhalt:     0.4
------------------------------------------------
v hat als Wert die Anfangsadresse des Vektors
v = &v[0] = 1244932

Auch main hat eine Adresse:
------------------------------------------------
&main = 4198400
 main = 4198400

Arbeiten mit Zeigern

Schreibe eine Programm, das die Arbeit mit Zeigern und Adressen demonstriert:

  1. Variablen definieren: f (float), i (int), pf (Zeiger auf float), pi (Zeiger auf int)
  2. Werte für f und i festlegen: z.B.: f = 0.01, i = 4
  3. den Zeigern die Adressen der dazu passenden Variablen zuordnen
  4.  über die Zeiger die Inhalte der Variablen ändern
  5.  die Inhalte der Variablen f und i ausgeben
  6.  die Adressen und Inhalte aller Variablen ausgeben

 

Lösung