Vektoren und Zeiger Aufgabe



  • Hallo

    short v[] = { 0, 10, 20 },
    *ptr1 = v, *ptr2 = v+2;}
    

    Welchen wert hat:
    ptr2 -ptr1

    Für eine ausführliche erklärung wäre ich sehr dankbar!! habe nähmlich absolut keinen Plan wie ich da auf 2(müsste das ergebniss sein) kommen soll!!!

    grüßle Joe



  • Ganz einfach du beginst bei null zu zählen.

    in c: 0 1 2
    in mathe: 1 2 3



  • *ptr1 = v;
    ptr1 verweist nun auf einen Wert, der der Speicheradresse von v bzw. v[0] entspricht.

    *ptr2 = v + 2;
    ptr2 verweist nun auf einen Wert, der der Speicheradresse von v+2 bzw. v[2] entspricht.

    ptr2 - ptr1 ist daher nicht definiert. Zumindest nicht bei deinem Beispiel. *ptr2 - *ptr1 schon eher.



  • Hier wird ja ne Menge Quatsch erzählt. Ist doch simple Mathe:

    ptr1 = v
    ptr2 = v + 2
    =>
    ptr2 – ptr1 = v + 2 – v = 2



  • Konrad Rudolph schrieb:

    Hier wird ja ne Menge Quatsch erzählt. Ist doch simple Mathe:

    ptr1 = v
    ptr2 = v + 2
    =>
    ptr2 – ptr1 = v + 2 – v = 2

    Lies die aufgabe nochmal. Dort steht *ptr1 = v und nicht ptr1 = v; Gewaltiger Unterschied.



  • short v[] = { 0, 10, 20 };
    short *ptr1;
    short *ptr2;
    
    int main (int argc, char** argv)
    {
        ptr1 = v+0; // null
        ptr2 = v+2;
        int a = ptr2 -ptr1; // a == 2 
    
       return 0;
    
    }
    


  • Ramsis schrieb:

    short v[] = { 0, 10, 20 };
    short *ptr1;
    short *ptr2;
    
    int main (int argc, char** argv)
    {
        ptr1 = v+0; // null
        ptr2 = v+2;
        int a = ptr2 -ptr1; // a == 2 
    
       return 0;
       
    }
    

    Bis auf das "// null" richtig. ptr1 ist dank v + 0 irgend eine Speicheradresse (die von v). Was in dem Array v drin steht, ist in diesem Beispiel irrelevant.



  • Fellhuhn schrieb:

    Bis auf das "// null" richtig. ptr1 ist dank v + 0 irgend eine Speicheradresse (die von v). Was in dem Array v drin steht, ist in diesem Beispiel irrelevant.

    Ein Kommentar ist für den Compiler unwichtig 😃

    Es wird von null an gezählt.
    *(v+0) == 0
    *(v+1) == 10
    *(v+2) == 20



  • Fellhuhn schrieb:

    Lies die aufgabe nochmal. Dort steht *ptr1 = v und nicht ptr1 = v; Gewaltiger Unterschied.

    Lies *Du* sie lieber nochmal. Das ist eine Deklaration. Da steht nicht '*ptr1 = v' sondern 'short* ptr1 = v'.



  • Konrad Rudolph schrieb:

    Fellhuhn schrieb:

    Lies die aufgabe nochmal. Dort steht *ptr1 = v und nicht ptr1 = v; Gewaltiger Unterschied.

    Lies *Du* sie lieber nochmal. Das ist eine Deklaration. Da steht nicht '*ptr1 = v' sondern 'short* ptr1 = v'.

    Ah, wenn das da tatsächlich ein , sein soll in der ersten Zeile des anfänglichen Codes und nicht ein Eingabefehler wie die letzte Klammer, dann hast recht.



  • Das eigentliche Fazit des Threads:
    Das ist hässlich formatiert und sollte so in keinem Code mehr auftauchen. Heutzutage kann man es sich leisten, pro Variable ein eigenes Statement zu benutzen.

    🤡


Anmelden zum Antworten