was ist gleich?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • was ist gleich?

    a) Gegeben ist einen Vektor v. Welche der folgenden Ausdrücke sind äquivalent?

    a) v und v[0]
    b) v und *v
    c) v und &v[0]
    d) *v und v[0]
    e) *v und &v[0]

    b) Gegeben sei der folgende Vektor:

    0 1 2 3 4 5 6 7 8
    arr ’o’ ’p’ ’e’ ’n’ ’ ’ ’s’ ’e’ ’a’ ’\0’

    Was gibt folgendes Programm aus?

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. char arr[] = "open sea"; // siehe oben
    4. int main()
    5. {
    6. char *p = arr,
    7. *q = arr + 4;
    8. cout << q - p << *q;
    9. p = ++q;
    10. while ( p < q+3)
    11. cout << *p++;
    12. cout << *q << *arr << *(q-2) << *q << endl;
    13. return 0;
    14. }
    Alles anzeigen


    c) Gegeben sei folgende Definition:

    int v[] = 0, 10, 20 , *ptr = v;
    Welche der folgenden Ausdrücke sind äquivalent zu *ptr++?
    a) *(ptr + 1)
    b) (*ptr)++
    c) *(ptr++)



    Hat jemand ne Idee? schon bei a) weiß ich gar nicht was *v sein soll.
    Vielen Dank :)

    cewbie
  • a) v und v[0]
    b) v und *v
    c) v und &v[0]
    d) *v und v[0]
    e) *v und &v[0]

    Aus unserer C Vorlesung kann ich dir verraten, dass v->id und(*v).id äquivalent sind.
    Also ein Pointer verweist auf eine Adresse - ein *v zeigt also auf ein &v

    Deine Aufgaben würd ich einfach mal ausprobieren:
    a) v und v[0] => FALSCH

    Quellcode

    1. int v = 5;
    2. printf("%i", v);
    3. printf("%i", v[0])

    b) v und *v => FALSCH

    Quellcode

    1. int v = 5;
    2. printf("%i", v);
    3. printf("%i", *v)

    c) v und &v[0] => RICHTIG

    Quellcode

    1. char v[] = "peter";
    2. printf("%s", v);
    3. printf("%s", &v[0]);

    d) *v und v[0] => RICHTIG

    Quellcode

    1. char v[] = "peter";
    2. printf("%c", *v);
    3. printf("%c", v[0]);

    e) *v und &v[0] => FALSCH

    Quellcode

    1. char v[] = "peter";
    2. printf("%c", *v);
    3. printf("%c", &v[0]);
  • Ich verstehe nur nicht, warum du die nicht einfach ausprobierst. Ich bin bei Leibe kein C Profi, aber das Auszuprobieren kostet mich nur 5 Minuten. Dazu muss ich nicht mal nachdenken ;)

    Quellcode

    1. int *ptr = v;
    2. printf("\n%i", *(ptr + 1)); /*es findet keine zuweisung statt*/
    3. printf("\n%i\n\n", *(ptr + 1));
    4. int *ptr2 = v;
    5. printf("\n%i", *(ptr2)++);
    6. printf("\n%i\n\n", *(ptr2)++);
    7. int *ptr3 = v;
    8. printf("\n%i", *(ptr3++));
    9. printf("\n%i\n\n", *(ptr3++));
    Alles anzeigen


    Ausgaben:
    20
    20

    10
    20

    10
    20


    C++ oder ANSI C machen in diesem Fall keinen Unterschied.