Vektoren und Zeiger Aufgabe
-
Hallo
short v[] = { 0, 10, 20 }, *ptr1 = v, *ptr2 = v+2;}Welchen wert hat:
ptr2 -ptr1Fü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 = 2Lies 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.