Zum Inhalt springen

L-Wert (Programmierung)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 8. Januar 2015 um 16:35 Uhr durch Havaniceday (Diskussion | Beiträge) (kleine Ergaenzung). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Dieser Artikel wurde am 7. Januar 2015 auf den Seiten der Qualitätssicherung eingetragen. Bitte hilf mit, ihn zu verbessern, und beteilige dich bitte an der Diskussion!
Folgendes muss noch verbessert werden:  WP:Wikifizieren: wenige Artikellinks, Kategorien fehlen, verwaist -- MerlBot 15:47, 7. Jan. 2015 (CET)

In der Programmierung wird innerhalb von Anweisungen zwischen L-Wert- und R-Wert-Ausdrücken unterschieden. Ein Ausdruck innerhalb einer Anweisung besitzt einen L-Wert, wenn der Ausdruck auf einen Speicherort verweist. Ausdrücke, die keinen L-Wert besitzen, sind R-Wert-Ausdrücke.

Ein L-Wert zeigt somit auf adressierbaren Speicher. Das L bedeutet, dass ein L-Wert-Ausdruck auf der linken Seite einer Zuweisung stehen kann. R-Wert-Ausdrücke dürfen nur auf der rechten Seite von Zuweisungen vorkommen. L-Wert-Ausdrücke sind häufig Bezeichner von Datentypen (Objekten), können jedoch auch als Funktionsaufrufe oder als Dereferenzierung von Feldern oder Zeigern vorkommen. Alle L-Wert-Ausdrücke haben zugleich R-Werte, aber nicht jeder R-Wert besitzt einen L-Wert.

Beispiele

// C++ Quellcode

#include <iostream>

int x;
int& f(int& val) { return val; }  // gibt einen L-Wert zurück
int  g(int val) { return val; }  // gibt einen R-Wert zurück

int main()
{
    x = 3;       // x ist ein L-Wert-Ausdruck, 3 ist ein R-Wert-Ausdruck
    f(x) = 0;    // f(x) ist ein L-Wert-Ausdruck, 0 ist ein R-Wert-Ausdruck

    // g(x) = 0     // Funktioniert nicht, da g(x) kein L-Wert-Ausdruck ist!

    std::cout << "Der L-Wert von f(x) ist " << &f(x) << std::endl;
    std::cout << "Der R-Wert von f(x) ist " << f(x) << std::endl;
// -----------------------------------------------------------------
  
    int field[3] = { 11, 22, 33 };
    int * p = field;
   
    field[2] = 1;   // Arrayindexierung als L-Wert-Ausdruck
    *(p+2) = 0;     // Zeigerdereferenzierung als L-Wert-Ausdruck
   
    std::cout << "Der L-Wert von *(p+2) ist " << p+2 << std::endl;
    std::cout << "Der L-Wert von field[2] ist " << &(field[2]) << std::endl;
}