Systemnahe Programmierung in Chome Systemnahe Programmierung in C: Variablen, Adressen und Zeiger Prof. Dr. Uwe Schmidt FH Wedel

Variablen, Adressen und Zeiger

weiter

weiter

Variablen und Zeiger

merke
Initialisierung nicht automatisch
weiter

weiter

fehlerhaftes Program: Resultat ist Zufall
test1.c

   1#include <stdio.h>
   2
   3int
   4main (void)
   5{
   6  int x;
   7
   8  printf ("Der Wert von x ist: %d\n"x);
   9
  10  return 0;
  11}
weiter

weiter

Compilieren

cc -o test1 test1.c

weiter

weiter

Ausführen

test1

weiter

weiter

Variablen und Adressen
test2.c

   1#include <stdio.h>
   2
   3int
   4main (void)
   5{
   6  int j = 1;
   7
   8  printf ("Der Wert von j ist   : %d\n"j);
   9  printf ("Die Adresse von j ist: %p\n"&j);
  10
  11  return 0;
  12}
weiter

weiter

Compilieren

cc -o test2 test2.c

weiter

weiter

Ausführen

test2

weiter

weiter

Zeiger dereferenzieren
test3.c

   1#include <stdio.h>
   2
   3int
   4main (void)
   5{
   6  char *pch;
   7  char ch1 = 'A'ch2;
   8
   9  printf ("Die Adresse von pch ist              %p\n"&pch);
  10
  11  pch = &ch1;
  12
  13  printf ("Der unter pch gespeicherte Wert ist  %p\n"pch);
  14
  15  printf ("Der dereferenzierte Wert von pch ist %c\n"*pch);
  16
  17  ch2 = *pch;
  18
  19  return 0;
  20}
weiter

weiter

Compilieren

cc -Wall -o test3 test3.c

weiter

weiter

Ausführen

test3

weiter

weiter

Syntaxregeln für Zeiger

Deklaration
von Zeigervariablen (vereinfachte Syntaxregeln)
 
VarableDeclaration
        ::= ...
          | PointerVariableDecl
 
PointerVariableDecl
        ::= Type * VariableName ;
weiter
merke
der * bezieht sich auf die Variable, nicht auf den Typ
weiter
Adressoperator
zur Berechnung einer Adresse einer Speicherzelle (Variablen)
 
Expr    ::= ...
          | AddressExpr
 
AddressExpr
        ::= & LValue
 
LValue  ::= Expr
weiter
merke
nicht jeder Ausdruck ist ein LValue-Ausdruck
merke
nicht zu jedem Ausdruck kann man eine Adresse berechnen
weiter
Dereferenzieren
Expr    ::= ...
          | DereferenceExpr
 
DereferenceExpr
        ::= * RValue
 
RValue  ::= Expr
weiter
merke
RValue muss ein Ausdruck mit einem Zeiger-Typ sein

Letzte Änderung: 11.01.2007
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel