pages/Kapitel04-page-01.svg

pages/Kapitel04-page-02.svg

pages/Kapitel04-page-03.svg

pages/Kapitel04-page-04.svg

pages/Kapitel04-page-05.svg

pages/Kapitel04-page-06.svg

pages/Kapitel04-page-07.svg

pages/Kapitel04-page-08.svg

pages/Kapitel04-page-09.svg

pages/Kapitel04-page-10.svg

pages/Kapitel04-page-11.svg

pages/Kapitel04-page-12.svg

pages/Kapitel04-page-13.svg

pages/Kapitel04-page-14.svg

pages/Kapitel04-page-15.svg

pages/Kapitel04-page-16.svg

pages/Kapitel04-page-17.svg

pages/Kapitel04-page-18.svg

pages/Kapitel04-page-19.svg

pages/Kapitel04-page-20.svg

pages/Kapitel04-page-21.svg

pages/Kapitel04-page-22.svg

pages/Kapitel04-page-23.svg

pages/Kapitel04-page-24.svg

pages/Kapitel04-page-25.svg

pages/Kapitel04-page-26.svg

pages/Kapitel04-page-27.svg

pages/Kapitel04-page-28.svg

pages/Kapitel04-page-29.svg

pages/Kapitel04-page-30.svg

pages/Kapitel04-page-31.svg

pages/Kapitel04-page-32.svg

pages/Kapitel04-page-33.svg

Live-Demo - Zeiger-Intro 1

#include <iostream>

using namespace std;

int main() {
    int i {1};
    // Zeiger auf i, direkt initialisiert
    int * pi {&i};

    i++;
    *pi = 0;
    (*pi)++;
 
    cout << "  i = " << i << endl;
    cout << "*pi = " << *pi << endl;

    return 0;
}
compiler
Beispiel '04-Zeiger-Intro.cpp' (Ausschnitt 1)

pages/Kapitel04-page-34.svg

pages/Kapitel04-page-35.svg

pages/Kapitel04-page-36.svg

pages/Kapitel04-page-37.svg

pages/Kapitel04-page-38.svg

pages/Kapitel04-page-39.svg

pages/Kapitel04-page-40.svg

pages/Kapitel04-page-41.svg

Live-Demo - Zeiger-Intro 2

#include <iostream>

using namespace std;

int main() {
    int i {1};
    int *pi = 0; // Probiert mal NULL und nullptr aus.

    cout << "  i = " << i << endl;
    cout << " pi = " << showbase << hex << pi << endl;
    // stuerzt ab, da pi nullptr:
//    cout << "*pi = " << *pi << endl;
    
    pi = &i;
    if (pi == nullptr) {
        cout << "pi ist nullptr" << endl;
    } else {
        cout << "pi ist kein nullptr" << endl;
    }

    return 0;
}
compiler
Beispiel '04-Zeiger-Intro.cpp' (Ausschnitt 2)

pages/Kapitel04-page-42.svg

pages/Kapitel04-page-43.svg

pages/Kapitel04-page-44.svg

pages/Kapitel04-page-45.svg

pages/Kapitel04-page-46.svg

pages/Kapitel04-page-47.svg

pages/Kapitel04-page-48.svg

pages/Kapitel04-page-49.svg

pages/Kapitel04-page-50.svg

pages/Kapitel04-page-51.svg

pages/Kapitel04-page-52.svg

pages/Kapitel04-page-53.svg

pages/Kapitel04-page-54.svg

pages/Kapitel04-page-55.svg

pages/Kapitel04-page-56.svg

pages/Kapitel04-page-57.svg

pages/Kapitel04-page-58.svg

pages/Kapitel04-page-59.svg

pages/Kapitel04-page-60.svg

pages/Kapitel04-page-61.svg

pages/Kapitel04-page-62.svg

pages/Kapitel04-page-63.svg

pages/Kapitel04-page-64.svg

pages/Kapitel04-page-65.svg

pages/Kapitel04-page-66.svg

pages/Kapitel04-page-67.svg

pages/Kapitel04-page-68.svg

pages/Kapitel04-page-69.svg

pages/Kapitel04-page-70.svg

pages/Kapitel04-page-71.svg

pages/Kapitel04-page-72.svg

pages/Kapitel04-page-73.svg

pages/Kapitel04-page-74.svg

pages/Kapitel04-page-75.svg

pages/Kapitel04-page-76.svg

pages/Kapitel04-page-77.svg

pages/Kapitel04-page-78.svg

pages/Kapitel04-page-79.svg

pages/Kapitel04-page-80.svg

pages/Kapitel04-page-81.svg

pages/Kapitel04-page-82.svg

pages/Kapitel04-page-83.svg

pages/Kapitel04-page-84.svg

pages/Kapitel04-page-85.svg

pages/Kapitel04-page-86.svg

pages/Kapitel04-page-87.svg

pages/Kapitel04-page-88.svg

pages/Kapitel04-page-89.svg

pages/Kapitel04-page-90.svg

pages/Kapitel04-page-91.svg

pages/Kapitel04-page-92.svg

pages/Kapitel04-page-93.svg

pages/Kapitel04-page-94.svg

pages/Kapitel04-page-95.svg

pages/Kapitel04-page-96.svg

pages/Kapitel04-page-97.svg

pages/Kapitel04-page-98.svg

pages/Kapitel04-page-99.svg

pages/Kapitel04-page-100.svg

pages/Kapitel04-page-101.svg

pages/Kapitel04-page-102.svg

pages/Kapitel04-page-103.svg

pages/Kapitel04-page-104.svg

pages/Kapitel04-page-105.svg

pages/Kapitel04-page-106.svg

pages/Kapitel04-page-107.svg

pages/Kapitel04-page-108.svg

pages/Kapitel04-page-109.svg

pages/Kapitel04-page-110.svg

pages/Kapitel04-page-111.svg

pages/Kapitel04-page-112.svg

pages/Kapitel04-page-113.svg

pages/Kapitel04-page-114.svg

pages/Kapitel04-page-115.svg

pages/Kapitel04-page-116.svg

pages/Kapitel04-page-117.svg

pages/Kapitel04-page-118.svg

pages/Kapitel04-page-119.svg

pages/Kapitel04-page-120.svg

Live-Demo - C-Strings

#include <iostream>

using namespace std;

int main() {
    char const *cstring_a = "hallo";
    char cstring_b[] = "welt";
    char *cptr = (char*)cstring_a;

    //cstring_a[0] = 'H';
    cstring_b[0] = 'W';
    //*cptr = 'H';
    
    cout << cstring_a << endl;
    cout << cstring_b << endl; 

    return 0;
}
compiler
Beispiel '04-Strings.cpp' (Ausschnitt 1)

pages/Kapitel04-page-121.svg

pages/Kapitel04-page-122.svg

pages/Kapitel04-page-123.svg

pages/Kapitel04-page-124.svg

pages/Kapitel04-page-125.svg

pages/Kapitel04-page-126.svg

pages/Kapitel04-page-127.svg

pages/Kapitel04-page-128.svg

pages/Kapitel04-page-129.svg

pages/Kapitel04-page-130.svg

pages/Kapitel04-page-131.svg

pages/Kapitel04-page-132.svg

pages/Kapitel04-page-133.svg

pages/Kapitel04-page-134.svg

pages/Kapitel04-page-135.svg

pages/Kapitel04-page-136.svg

pages/Kapitel04-page-137.svg

pages/Kapitel04-page-138.svg

pages/Kapitel04-page-139.svg

pages/Kapitel04-page-140.svg

pages/Kapitel04-page-141.svg

pages/Kapitel04-page-142.svg

pages/Kapitel04-page-143.svg

pages/Kapitel04-page-144.svg

pages/Kapitel04-page-145.svg

pages/Kapitel04-page-146.svg

pages/Kapitel04-page-147.svg

pages/Kapitel04-page-148.svg

pages/Kapitel04-page-149.svg

pages/Kapitel04-page-150.svg

pages/Kapitel04-page-151.svg

Wissensspeicher 4

  • Bisher: Verbergen des eigentlichen Speicherzugriffs - int j = 42;
  • Jetzt: Zeiger (oder das Tor zur Hölle 😈) - int *k = 0x4711;
  • Zeiger sind …
    • selbst Variablen deren Größe sich nach der Architektur richtet; nicht nach dem Datentyp auf den sie zeigen
    • können beliebige Adressen enthalten und greifen dort auf Speicher zu 🚨
    • veränderbar: Zeigerarithmetik
  • 🚨 Zeigerarithmetik 🚨
    • Beliebiges erhöhen oder erniedrigen der Zeigervariablen verändert die Adresse: k = k + 12;
    • Wichtig: Bei der Adressberechung spielt der Datentyp, auf den gezeigt wird, eine Rolle: k=k+nsizeof(k)

pages/Kapitel04-page-152.svg

pages/Kapitel04-page-153.svg

pages/Kapitel04-page-154.svg

pages/Kapitel04-page-155.svg

pages/Kapitel04-page-156.svg

pages/Kapitel04-page-157.svg

pages/Kapitel04-page-158.svg

pages/Kapitel04-page-159.svg

pages/Kapitel04-page-160.svg

pages/Kapitel04-page-161.svg

pages/Kapitel04-page-162.svg

pages/Kapitel04-page-163.svg

pages/Kapitel04-page-164.svg

pages/Kapitel04-page-165.svg

pages/Kapitel04-page-166.svg

pages/Kapitel04-page-167.svg

pages/Kapitel04-page-168.svg

pages/Kapitel04-page-169.svg

pages/Kapitel04-page-170.svg

pages/Kapitel04-page-171.svg

pages/Kapitel04-page-172.svg

pages/Kapitel04-page-173.svg

pages/Kapitel04-page-174.svg

pages/Kapitel04-page-175.svg

pages/Kapitel04-page-176.svg

pages/Kapitel04-page-177.svg

pages/Kapitel04-page-178.svg

pages/Kapitel04-page-179.svg

pages/Kapitel04-page-180.svg

pages/Kapitel04-page-181.svg

pages/Kapitel04-page-182.svg

pages/Kapitel04-page-183.svg

pages/Kapitel04-page-184.svg

pages/Kapitel04-page-185.svg

pages/Kapitel04-page-186.svg

pages/Kapitel04-page-187.svg

pages/Kapitel04-page-188.svg

pages/Kapitel04-page-189.svg

pages/Kapitel04-page-190.svg

pages/Kapitel04-page-191.svg

pages/Kapitel04-page-192.svg

pages/Kapitel04-page-193.svg

pages/Kapitel04-page-194.svg

pages/Kapitel04-page-195.svg

pages/Kapitel04-page-196.svg

pages/Kapitel04-page-197.svg

pages/Kapitel04-page-198.svg

pages/Kapitel04-page-199.svg

pages/Kapitel04-page-200.svg

pages/Kapitel04-page-201.svg

pages/Kapitel04-page-202.svg

pages/Kapitel04-page-203.svg

pages/Kapitel04-page-204.svg

pages/Kapitel04-page-205.svg

pages/Kapitel04-page-206.svg

pages/Kapitel04-page-207.svg

pages/Kapitel04-page-208.svg

pages/Kapitel04-page-209.svg

pages/Kapitel04-page-210.svg

pages/Kapitel04-page-211.svg

pages/Kapitel04-page-212.svg

pages/Kapitel04-page-213.svg

pages/Kapitel04-page-214.svg

pages/Kapitel04-page-215.svg

pages/Kapitel04-page-216.svg

Live-Demo - Dynamischer Speicher

#include <iostream>

using namespace std;

struct Point {
    int x, y;
};

int main() {
    Point *pp = new Point(42.5,21.3); // <-- Probiert hier mal die geschweiften Klammern aus

    cout << "Point(" << pp->x << ", " << pp->y << ")" << endl;

    return 0;
}
compiler

pages/Kapitel04-page-217.svg

pages/Kapitel04-page-218.svg

pages/Kapitel04-page-219.svg

pages/Kapitel04-page-220.svg

pages/Kapitel04-page-221.svg

pages/Kapitel04-page-222.svg

pages/Kapitel04-page-223.svg

pages/Kapitel04-page-224.svg

pages/Kapitel04-page-225.svg

pages/Kapitel04-page-226.svg

pages/Kapitel04-page-227.svg

pages/Kapitel04-page-228.svg

pages/Kapitel04-page-229.svg

pages/Kapitel04-page-230.svg

pages/Kapitel04-page-231.svg

pages/Kapitel04-page-232.svg

pages/Kapitel04-page-233.svg

pages/Kapitel04-page-234.svg

pages/Kapitel04-page-235.svg

pages/Kapitel04-page-236.svg

pages/Kapitel04-page-237.svg

pages/Kapitel04-page-238.svg

pages/Kapitel04-page-239.svg

pages/Kapitel04-page-240.svg

pages/Kapitel04-page-241.svg

pages/Kapitel04-page-242.svg

pages/Kapitel04-page-243.svg

pages/Kapitel04-page-244.svg

pages/Kapitel04-page-245.svg

pages/Kapitel04-page-246.svg

pages/Kapitel04-page-247.svg

pages/Kapitel04-page-248.svg

pages/Kapitel04-page-249.svg

pages/Kapitel04-page-250.svg

pages/Kapitel04-page-251.svg

pages/Kapitel04-page-252.svg

pages/Kapitel04-page-253.svg

pages/Kapitel04-page-254.svg

pages/Kapitel04-page-255.svg

pages/Kapitel04-page-256.svg